2014-05-30 13 views
10

print.__doc__ kết quả đầu ra:in .__ doc__ vs getattr (__ BUILTIN __, "in") .__ doc__

SyntaxError: invalid syntax 

nơi như

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

Đầu ra:

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

Prints các giá trị theo luồng hoặc đến sys.stdout theo mặc định. Đối số từ khóa tùy chọn:

tệp: đối tượng giống như tệp (luồng); mặc định là sys.stdout hiện tại.
sep: chuỗi được chèn vào giữa các giá trị, mặc định là dấu cách.
kết thúc: chuỗi được nối sau giá trị cuối cùng, mặc định là dòng mới.

bất cứ ai có thể giúp tôi hiểu tại sao print.__doc__ là đưa ra một lỗi cú pháp thay vì in chuỗi doc

Trả lời

18

Trong Python 2 (hoặc Python < 2,6 là rất chính xác) print là hoàn toàn không có gì giống như một hàm, và do đó không có docstring. Nó thậm chí không đánh giá tất cả các đối số của nó trước khi nó bắt đầu in:

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

42 được in trước khi a được đánh giá. print là một tuyên bố dự kiến ​​từ 0 đến N biểu thức được phân cách bằng dấu phẩy sau nó, được tùy chọn trước bởi cấu trúc >> file, cấu trúc print.__doc__ là bất hợp pháp. Nó có ý nghĩa ít nhất là if.__doc__ hoặc return.__doc__.

Tuy nhiên bắt đầu với Python 2.6, các printchức năng có sẵn trong các mô-đun __builtin__, nhưng không được sử dụng bởi mặc định như tuyên bố print va chạm với nó, trừ khi phân tích cú pháp cho print tuyên bố được vô hiệu hóa bởi from __future__ import print_function.

9

In không phải là toàn cầu có sẵn như là một hàm trong Python 2, vì vậy bạn không thể đối xử với nó như một vật. Đó là một tuyên bố.

Trong Python 3 hoặc Python 2 với from __future__ import print_function, tuy nhiên, print là một chức năng bình thường và bạn có thể đọc thuộc tính __doc__.

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

Lưu ý: Chức năng này thường không có sẵn như là một built-in kể từ khi in tên được công nhận là báo cáo kết quả in. Để vô hiệu hóa các tuyên bố và sử dụng print() chức năng, sử dụng tuyên bố tương lai này ở phía trên cùng của mô-đun của bạn:

from __future__ import print_function 
+0

+1 Không bao giờ xảy ra với tôi rằng chức năng 'in' luôn có sẵn và việc nhập tương lai chỉ đơn giản là vô hiệu hóa lệnh' print', thay vì làm cho chức năng 'in' có sẵn. – chepner