2014-05-30 41 views
10

print.__doc__输出:打印.__ doc__会给出VS GETATTR(__内建__, “打印”).__ doc__会给出

SyntaxError: invalid syntax 

其中作为

>>> getattr(__builtin__,"print").__doc__ 

输出:

print(value, ..., sep=' ', end='\n', file=sys.stdout) 

打印的值到流,或默认为sys.stdout。可选的关键字参数:

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

谁能帮我明白为什么print.__doc__是给一个语法错误,而不是打印文档字符串

回答

18

在Python 2(或Python < 2.6是非常准确的)print是绝对没有像一个函数,因此没有文档字符串。

>>> print 42, a 
42 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
NameError: name 'a' is not defined 

42a评价之前打印:它开始打印之前甚至没有评估它的所有参数。 print是一个声明,期望在它后面有0到N个逗号分隔的表达式,可选地前面是构造>> file,构造print.__doc__是非法的。它与if.__doc__return.__doc__一样毫无意义。

但是开始与Python 2.6,该print功能__builtin__模块中使用,但不使用默认的print声明碰撞,除非解析为print语句由from __future__ import print_function禁用。

9

打印不是全局可作为在Python 2的功能,所以你不能把它当作一个目的。这是一个声明。

在Python 3或Python 2中使用from __future__ import print_function,但是,print是正常功能,您可以阅读__doc__属性。

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

注:此功能不能正常使用的内置自名印是公认的print语句。要禁用语句,并使用print()函数,在您的模块的顶部使用这个未来的语句:

from __future__ import print_function 
+0

+1我从来没有想到'print'函数总是可用,并且将来的导入只是简单地禁用'print'语句,而不是使'print'函数可用。 – chepner