print .__ doc__ vs getattr(__ builtin __,"print").__ doc__

cla*_*ius 10 python python-2.x

print.__doc__ 输出:

SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud)

在哪里

>>> getattr(__builtin__,"print").__doc__
Run Code Online (Sandbox Code Playgroud)

输出:

print(value, ..., sep=' ', end='\n', file=sys.stdout)
Run Code Online (Sandbox Code Playgroud)

将值打印到流,或sys.stdout默认情况下打印.可选关键字参数:

file:类文件对象(stream); 默认为当前sys.stdout.
sep:在值之间插入的字符串,默认为空格.
end:在最后一个值后附加的字符串,默认为换行符.

任何人都可以帮助我理解为什么print.__doc__给出语法错误而不是打印文档字符串

Ant*_*ala 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
Run Code Online (Sandbox Code Playgroud)

42a评估之前打印.print期望在其后面有0到N逗号分隔的表达式,可选地在构造之前>> file,该构造print.__doc__是非法的.它没有任何意义if.__doc__,或return.__doc__.

但是从Python 2.6开始,该print 函数__builtin__模块中可用,但默认情况下不会使用该print 语句语句冲突,除非print语句的解析被禁用from __future__ import print_function.


Kos*_*Kos 9

Print不是作为Python 2中的函数全局提供的,因此您不能将其视为对象.这是一个声明.

from __future__ import print_function但是,在Python 3或Python 2 中,它print是一个普通函数,您可以读取该__doc__属性.

请参阅:https://docs.python.org/2/library/functions.html#print

注意:此功能通常不作为内置函数提供,因为名称print被识别为print语句.要禁用该语句并使用print()函数,请在模块顶部使用此future语句:

from __future__ import print_function
Run Code Online (Sandbox Code Playgroud)