print.__doc__ 与 getattr(__builtin__,"print").__doc__ 的区别
print.__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__
会出现语法错误,而不是打印出文档字符串?
2 个回答
在Python 2中,print并不是一个全局可用的函数,所以你不能把它当作一个对象来使用。它其实是一个语句。
不过在Python 3中,或者在Python 2中加上from __future__ import print_function
,print就变成了一个普通的函数,这样你就可以查看它的__doc__
属性了。
你可以查看这个链接了解更多信息:https://docs.python.org/2/library/functions.html#print
注意:这个函数通常不是内置的,因为print这个名字被当作print语句来识别。如果你想禁用这个语句并使用print()函数,可以在你的模块顶部加上这个未来语句:
from __future__ import print_function
在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到多个用逗号分隔的表达式,前面可以选择性地加上>> file
这样的构造。而像print.__doc__
这样的写法是非法的。它就像if.__doc__
或者return.__doc__
一样没有意义。
不过,从Python 2.6开始,print
变成了一个可以使用的函数,它在__builtin__
模块里,但默认情况下并不会使用这个函数,因为print
作为语句和它会冲突,除非通过from __future__ import print_function
来禁用对print
语句的解析。