Print.__ doc__ vs getattr (__ builtin __, "print" ).__ doc__
print.__doc__
выходы:
SyntaxError: invalid syntax
где as
>>> getattr(__builtin__,"print").__doc__
Выходы:
print(value, ..., sep=' ', end='\n', file=sys.stdout)
Печатает значения в потоке или по sys.stdout
по умолчанию. Необязательные аргументы ключевого слова:
file: файловый объект (поток); по умолчанию используется текущий sys.stdout
.
sep: строка, вставленная между значениями, по умолчанию пробел.
end: строка добавляется после последнего значения, по умолчанию используется новая строка.
Может ли кто-нибудь помочь мне понять, почему print.__doc__
дает синтаксическую ошибку вместо печати строки документа
Ответы
Ответ 1
В Python 2 (или Python < 2.6, чтобы быть очень точным) print
абсолютно ничего не напоминает функцию и, следовательно, не имеет docstring. Он даже не оценивает все свои аргументы до начала печати:
>>> print 42, a
42
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'a' is not defined
42
был напечатан до того, как был оценен a
. print
- это утверждение, которое ожидает от него от 0 до N после запятой, необязательно предшествующего конструкту >> file
, конструкция print.__doc__
является незаконной. Это имеет мало смысла, как if.__doc__
, или return.__doc__
.
Однако, начиная с Python 2.6, функция print
доступна в модуле __builtin__
, но не используется по умолчанию, поскольку оператор print
сталкивается с ней, если только синтаксический анализ для print
оператора не отключен на from __future__ import print_function
.
Ответ 2
Печать не доступна глобально в функции Python 2, поэтому вы не можете рассматривать ее как объект. Это выражение.
В Python 3 или Python 2 с from __future__ import print_function
, однако, print
является нормальной функцией, и вы можете прочитать атрибут __doc__
.
Смотрите: https://docs.python.org/2/library/functions.html#print
Примечание. Эта функция обычно недоступна как встроенная, так как печать имени распознается как оператор печати. Чтобы отключить оператор и использовать функцию print(), используйте этот оператор будущего в верхней части вашего модуля:
from __future__ import print_function