2014-05-30 3 views
10

print.__doc__ wyjść:druku .__ doc__ vs getattr (__ wbudowane __ "print") .__ doc__

SyntaxError: invalid syntax 

gdzie jako

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

Wyjścia:

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

drukuje wartości do strumienia lub domyślnie do sys.stdout. Opcjonalne argumenty słów kluczowych:

plik: obiekt podobny do pliku (strumień); domyślnie do bieżącego sys.stdout.
sep: ciąg wstawiony między wartościami, domyślnie spacja.
koniec: ciąg dołączany po ostatniej wartości, domyślnie znak nowej linii.

Czy ktoś może mi pomóc zrozumieć dlaczego print.__doc__ daje błąd składni zamiast drukować ciąg doc

Odpowiedz

18

w Pythonie 2 (lub Python < 2.6 jest bardzo dokładny) print ma absolutnie nic funkcja, a więc nie ma docstringu. To nawet nie oceniać wszystkich swoich argumentów przed rozpoczęciem drukowania:

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

42 został wydrukowany przed a oceniano. print jest instrukcją, która oczekuje od 0 do N wyrażenia oddzielonego przecinkiem, opcjonalnie poprzedzonego konstruktem >> file, konstrukcja print.__doc__ jest nielegalna. Ma to najmniejszy sens, jak if.__doc__ lub return.__doc__.

Jednak wychodząc z Python 2.6, printfunkcja jest dostępna w module __builtin__, ale nie jest używany domyślnie jako rachunku print zderza się z nią, chyba że parsowania dla print oświadczenie jest wyłączona from __future__ import print_function.

9

druku nie jest ogólnie dostępna jako funkcja w Pythonie 2, więc nie można go traktować jako obiekt. To jest oświadczenie.

W języku Python 3 lub Python 2 z from __future__ import print_function jest jednak normalna funkcja i można odczytać atrybut __doc__.

Patrz: https://docs.python.org/2/library/functions.html#print

Uwaga: Funkcja ta nie jest zwykle dostępny jako wbudowana ponieważ nazwa druk uznawany jest za oświadczenie druku. Aby wyłączyć oświadczenia i użyć funkcji print(), użyj tego przyszłego komunikatu w górnej części modułu:

from __future__ import print_function 
+0

+1 Nigdy nie przyszło mi do głowy, że funkcja 'print' była zawsze dostępna i że przyszły import po prostu wyłączył opcję' print', zamiast udostępniać funkcję 'print'. – chepner