Python 扩展打印语句/函数的功能
我想使用它们的Python 扩展打印语句/函数的功能,python,python-2.7,python-3.x,decorator,Python,Python 2.7,Python 3.x,Decorator,我想使用它们的str()方法而不是repr()来打印特定规格的内容,例如打印容器([],{},())。编写一个函数来实现这一点很简单 def str_print_list(alist): print "["+", ".join(map(str, alist))+"]" 但是,如果我可以扩展或修饰或(在Python 2.7中)的,那就太好了 我可以做类似的事情,它在Python3中工作(在Python3.2.3AT中测试) 这给了我一个 [Repr] [String] 但是在Pytho
str()
方法而不是repr()
来打印特定规格的内容,例如打印容器([]
,{}
,()
)。编写一个函数来实现这一点很简单
def str_print_list(alist):
print "["+", ".join(map(str, alist))+"]"
但是,如果我可以扩展或修饰或(在Python 2.7中)的,那就太好了
我可以做类似的事情,它在Python3中工作(在Python3.2.3AT中测试)
这给了我一个
[Repr]
[String]
但是在Python2.7.6中给出了一个语法错误
print = my_decorator(print)
直到我进口
from __future__ import print_function
这是有道理的,因为语句(据我所知)不能被修饰或重新分配
所以我的问题是
str\u print\u list()
函数?在这种情况下,我知道这是我个人使用的,主要用于调试列表
,并传递它——这正是继承的目的class MyPrintableList(list):
def __repr__(self):
return "[{}]".format(",".join(self))
print MyPrintableList([foo()])
在Python2.x中,print不是一个函数,而是一个语言构造。您需要在Python2.x中执行“从未来导入打印”函数的
,以获得Python3.x样式的print
函数。@isedev是的,我在我的问题中这样说(在底部)。我想明确一点,如果可能的话,我在寻求一种扩展语句的方法,否则只需要导入函数OK,让我换一种说法:你不能修饰语句,所以你必须导入函数。你可以在sys.stdout
上安装一个自定义处理程序,它将拦截打印调用,在将其输送到标准输出之前对其进行修改。这适用于所有python版本。我在这里所做的就是一个例子:@roippi,所以我只需将colorize
函数替换为一个使列表更干净的函数,然后加入一些if语句?
class MyPrintableList(list):
def __repr__(self):
return "[{}]".format(",".join(self))
print MyPrintableList([foo()])