Python3 global dir - PullRequest
       42

Python3 global dir

1 голос
/ 17 октября 2019

При входе в оболочку python3.6 dir выдает следующее:

>>> dir()
['__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__']

__builtins__ производит все встроенные методы python, например те, что описаны здесь и __name__ будет (всегда?) равным __main__. А как насчет других: те, которые когда-либо были заполнены когда (1) в интерпретаторе python;или (2) запуск сценария: и если да, то когда?

Вот пример запуска сценария python с именем temp.py:

if __name__ == '__main__':
    print (dir())
    print ("__annotations__: %s" % __annotations__)
    print ("__builtins__: %s" % __builtins__)
    print ("__cached__: %s" % __cached__)
    print ("__doc__: %s" % __doc__)
    print ("__file__: %s" % __file__)
    print ("__name__: %s" % __name__)
    print ("__package__: %s" % __package__)
    print ("__spec__: %s" % __spec__)

Запуск его:

$ python temp.py
['__annotations__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__']
 __annotations__: {}
__builtins__: <module 'builtins' (built-in)> # <== always populated
__cached__: None
__doc__: None
__file__: temp.py # <== populated if running from a file/script
__name__: __main__ # <== populated (always with main?)
__package__: None

Как / когда заселены __annotation__, __cached__, __doc__, __package__? И разве __name__ никогда не __main__?

1 Ответ

1 голос
/ 17 октября 2019

__name__ - это только __main__ в выполняемом скрипте. Он содержит полное имя модуля, к которому он доступен:

>>> __name__
'__main__'
>>> from logging import config
>>> config.__name__
'logging.config'

__cached__ и __package__ являются Атрибутами модуля, связанными с импортом .

__doc__ содержит строку документа текущего модуля или функции.

__annotations__ содержит аннотаций глобалов.

...