我想按照特定规范打印内容,例如使用它们的打印容器([]
、{}
、()
) 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
这是有道理的,因为语句不能(据我所知)被修饰或重新分配。
所以我的问题是
- 是否可以修饰 print 语句,这样我就不必导入该函数?
- 这是一个好主意,还是我应该更明确地使用我的
str_print_list()
函数?在这种情况下,我知道事实上这将供我个人使用,并且主要用于调试
最佳答案
- 不可以,声明无法更改。
- 没有。处理这个问题的方法是创建您自己的
列表
并将其传递——这正是继承的目的。
像这样:
class MyPrintableList(list):
def __repr__(self):
return "[{}]".format(",".join(self))
print MyPrintableList([foo()])
关于python - 扩展 print 语句/函数的功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25586430/