print .__ doc__ vs getattr(__ builtin __,“print”).__ doc__

时间:2014-05-30 09:21:18

标签: python python-2.x

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__提供语法错误而不是打印文档字符串

2 个答案:

答案 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之前打印了

aprint是一个语句,它在其后面需要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