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

标签 python python-2.7 python-3.x decorator

我想按照特定规范打印内容,例如使用它们的打印容器([]{}()) 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/

相关文章:

python - Python 2.7 中的 Open() 和 codecs.open() 行为异常不同

python - 数字中的下划线是什么意思?

python - 获取指针的像素位置

python - Pandas - key 存在时获取 key 错误

python - 类型错误 : unhashable type: 'list' in Django/djangorestframework

python - 如何在 Pandas 中组合和形成复杂的数据框

python - 使用python中的rawpy模块将原始图像转换为tiff

python - MySQL: django.db.utils.OperationalError: (1366, "Incorrect integer value: ' Category object' for column 'category_id' at row 1")

python - 如何在热图中注释和正确放置数字

python - . + tab AutoComplete 在 Jupyter Notebook 中不起作用