Я хочу напечатать вещи определенной спецификации, такие как печать контейнеры ([]
, {}
, ()
), используя свой метод str()
вместо repr()
. Это тривиально, чтобы написать функцию, которая будет делать этоРасширить функциональность оператора печати/функции
def str_print_list(alist):
print "["+", ".join(map(str, alist))+"]"
но было бы очень хорошо, если бы я мог бы просто расширить или украсить либо print
statement или print()
function (в Python 2.7)
Я мог бы сделать что-то вроде этого, который работает в Python 3 (протестировано в Python 3.2.3 в http://www.compileonline.com/execute_python3_online.php)
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
, который имеет смысл, потому что утверждения не может (насколько я знаю) быть украшен или переназначен.
Так что мой вопрос
- Можно украсить заявление для печати, так что я не импортировать функцию?
- Это даже хорошая идея, или я должен быть более явным и использовать функцию
str_print_list()
? В этом случае я знаю за то, что это было бы для моего личного использования и будет использоваться в основном для отладки
В Python 2.x 'print' это не функция, а конструкция языка. Вам нужно выполнить 'from __future__ import print_function' в Python 2.x, чтобы получить функцию' print' в стиле Python 3.x. – isedev
@isedev да, я говорю это в моем вопросе (в сторону дна). Я хотел бы быть ясным, что я прошу о возможности расширения выражения, если это возможно, в противном случае только импортированная функция – Dannnno
ok, позвольте мне сказать иначе: вы не можете украшать утверждения, поэтому вам нужно импортировать эту функцию. – isedev