gpt4 book ai didi

python - 扩展 print 语句/函数的功能

转载 作者:行者123 更新时间:2023-11-30 23:20:19 25 4
gpt4 key购买 nike

我想按照特定规范打印内容,例如使用它们的打印容器([]{}()) str() 方法而不是 repr()。编写一个可以做到这一点的函数很简单

def str_print_list(alist):
print "["+", ".join(map(str, alist))+"]"

但如果我可以扩展或装饰 print statement ,那就太好了或print() function (在Python 2.7中)

我可以做类似这样的事情,它可以在 python 3 中工作(在 http://www.compileonline.com/execute_python3_online.php 处的 Python 3.2.3 中测试)

class foo(): 
def __str__(self):
return "String"
def __repr__(self):
return "Repr"

print([foo()])

def my_decorator(func):
def inner(alist):
if isinstance(alist, list):
return func("["+", ".join(map(str, alist))+"]")
else:
return func(alist)
return inner

print = my_decorator(print)
print([foo()])

这给了我一个输出

[Repr]
[String]

但在 python 2.7.6 中给了我一个语法错误

print = my_decorator(print)

直到我导入

from __future__ import print_function

这是有道理的,因为语句不能(据我所知)被修饰或重新分配。

所以我的问题是

  1. 是否可以修饰 print 语句,这样我就不必导入该函数?
  2. 这是一个好主意,还是我应该更明确地使用我的 str_print_list() 函数?在这种情况下,我知道事实上这将供我个人使用,并且主要用于调试

最佳答案

  1. 不可以,声明无法更改。
  2. 没有。处理这个问题的方法是创建您自己的列表并将其传递——这正是继承的目的。

像这样:

class MyPrintableList(list):
def __repr__(self):
return "[{}]".format(",".join(self))

print MyPrintableList([foo()])

关于python - 扩展 print 语句/函数的功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25586430/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com