2012-01-19 35 views
16

Liên quan: What is the common header format of Python files?Tìm danh sách tất cả các biến số hai dấu gạch dưới?

Tôi có thể tìm danh sách tất cả các biến/từ khóa đôi dưới đây thường được sử dụng trong Python ở đâu?

Trong Python, các biến bắt đầu và kết thúc bằng dấu gạch dưới kép thường lưu trữ siêu dữ liệu hoặc được tích hợp vào hệ thống. Ví dụ,

#!/usr/bin/env python 

__author__ = 'Michael0x2a' 
__license__ = 'GPL' 

class Test(object): 
    def __init__(self): 
     print 'Hello World!' 

if __name__ == '__main__': 
    t = Test() 

tôi khá chắc chắn __author____license__ đang khá nổi tiếng. Các biến siêu dữ liệu đôi gạch dưới nào khác có ở đó? Có danh sách toàn diện nào tôi có thể kiểm tra ở đâu đó không? Tôi có thể tự mình tạo ra, hoặc có một loạt những cái đã trở thành tiêu chuẩn thực tế mà tôi nên sử dụng?

Những thứ như __init__, __name____doc__ được tích hợp khá nhiều vào Python. Đó có phải là hai từ khóa chỉ có hai dấu gạch dưới được đặt trước không? Còn nữa không? Có nơi nào tôi có thể lấy danh sách không?

[Chỉnh sửa]
Tôi đang xem và gặp phải một question mà liên kết với một mindmap của một loạt các biến đúp nhấn mạnh.

+3

Không ai trong số đó là những từ khóa ** ** * mỗi gia nhập*; chúng chỉ là "huyền diệu". –

Trả lời

22

Nếu bạn muốn xem tên kỳ diệu dù ghi nhận hay không, hãy vào thư mục Lib và chạy:

egrep -oh '__[A-Za-z_][A-Za-z_0-9]*__' *.py | sort | uniq 

Đó sản xuất:

'__all__' 
'__args__' 
'__author__' 
'__bases__' 
'__builtin__' 
'__builtins__' 
'__cached__' 
'__call__' 
'__class__' 
'__copy__' 
'__credits__' 
'__date__' 
'__decimal_context__' 
'__deepcopy__' 
'__dict__' 
'__doc__' 
'__exception__' 
'__file__' 
'__flags__' 
'__ge__' 
'__getinitargs__' 
'__getstate__' 
'__gt__' 
'__import__' 
'__importer__' 
'__init__' 
'__ispkg__' 
'__iter__' 
'__le__' 
'__len__' 
'__loader__' 
'__lt__' 
'__main__' 
'__module__' 
'__mro__' 
'__name__' 
'__package__' 
'__path__' 
'__pkgdir__' 
'__return__' 
'__safe_for_unpickling__' 
'__setstate__' 
'__slots__' 
'__temp__' 
'__test__' 
'__version__' 
+4

Điều thú vị là có hàng tá tên dunder nổi tiếng không có trong danh sách này: __add__, __iadd__, __radd__, v.v. –

+4

@NedBatchelder Để có danh sách đầy đủ hơn, bạn cần phải tìm kiếm đệ quy __Lib__ * và * các thư mục bên dưới nó: '' tìm Lib -name '* .py' -exec egrep -oh '__ [A-Za-z _] [A-Za-z_0-9] * __' '{}' \; | sắp xếp | uniq''. Bạn sẽ thấy rằng có * nhiều * tên khác - 256 trong số chúng trên thanh toán Py27 của tôi :) –

10

Danh sách đầy đủ được Python sử dụng được đưa ra trong Python Language Reference section 3, "Data model". Mỗi loại khác không chuẩn hoặc được sử dụng bởi các mô-đun của bên thứ ba và được ghi chép riêng biệt.

+0

PEP 8 liệt kê '__version__' là biến toàn cục duy nhất cho mục đích thuần túy. –

+1

Điều thú vị là '__version__' không xuất hiện trong tham chiếu ngôn ngữ được liên kết. – Bengt

+0

Đó là vì nó không phải là một phần của ngôn ngữ. –

Các vấn đề liên quan