print.__doc__
输出:
SyntaxError: invalid syntax
其中
>>> getattr(__builtin__,"print").__doc__
输出:
print(value, ..., sep=' ', end='\n', file=sys.stdout)
默认情况下,将值打印到流或
sys.stdout
。可选的关键字参数:file:类文件对象(stream);默认为当前
sys.stdout
sep:在值之间插入的字符串,默认为空格 end:在最后一个值后附加的字符串,默认为换行符。
任何人都可以帮助我理解为什么print.__doc__
提供语法错误而不是打印文档字符串
答案 0 :(得分:17)
在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
语句的解析。
答案 1 :(得分:9)
打印在Python 2中不是全局可用的功能,因此您不能将其视为对象。这是一个声明。
在Python 3或带有from __future__ import print_function
的Python 2中,print
是一个普通函数,您可以阅读__doc__
属性。
请参阅:https://docs.python.org/2/library/functions.html#print
注意:此功能通常不作为内置功能使用,因为名称print被识别为print语句。要禁用该语句并使用print()函数,请在模块顶部使用此future语句:
from __future__ import print_function