Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 扩展打印语句/函数的功能_Python_Python 2.7_Python 3.x_Decorator - Fatal编程技术网

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()])