Python là năng động chứ không phải tĩnh trong tự nhiên. Thay vì một bảng biểu tượng như trong mã đối tượng đã biên dịch, máy ảo có một không gian tên địa chỉ cho các biến của bạn.
Chức năng dir()
hoặc dir(module)
trả về không gian tên hiệu dụng tại điểm đó trong mã. Nó chủ yếu được sử dụng trong các thông dịch viên tương tác nhưng có thể được sử dụng bởi mã là tốt. Nó trả về một danh sách các chuỗi, mỗi chuỗi là một biến với một số giá trị.
Hàm globals()
trả về từ điển tên biến cho giá trị biến, trong đó tên biến được coi là toàn cục trong phạm vi tại thời điểm đó.
Hàm locals()
trả về từ điển tên biến cho giá trị biến, trong đó tên biến được xem là cục bộ trong phạm vi tại thời điểm đó.
$ python
Python 2.6.5 (r265:79063, Apr 16 2010, 13:57:41)
[GCC 4.4.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> locals()
{'__builtins__': <module '__builtin__' (built-in)>, '__name__': '__main__', '__doc__': None, '__package__': None}
>>> globals()
{'__builtins__': <module '__builtin__' (built-in)>, '__name__': '__main__', '__doc__': None, '__package__': None}
>>> dir()
['__builtins__', '__doc__', '__name__', '__package__']
>>> import base64
>>> dir(base64)
['EMPTYSTRING', 'MAXBINSIZE', 'MAXLINESIZE', '__all__', '__builtins__', '__doc__', '__file__', '__name__', '__package__', '_b32alphabet', '_b32rev', '_b32tab', '_translate', '_translation', '_x', 'b16decode', 'b16encode', 'b32decode', 'b32encode', 'b64decode', 'b64encode', 'binascii', 'decode', 'decodestring', 'encode', 'encodestring', 'k', 're', 'standard_b64decode', 'standard_b64encode', 'struct', 'test', 'test1', 'urlsafe_b64decode', 'urlsafe_b64encode', 'v']
làm cho bạn nghĩ gì python tạo ra một bảng biểu tượng? –
@WinstonEwert :: http://docs.python.org/library/symtable.html –