При входе в оболочку 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__
?