2014-05-30 76 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