首页 > 解决方案 > Python3 全局目录

问题描述

在 python3.6 shell 中输入时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__吗?

标签: pythonpython-internals

解决方案


__name____main__在正在运行的脚本中。它包含访问它的模块的完全限定名称:

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

__cached__并且__package__与导入相关的模块属性

__doc__保存当前模块或函数的文档字符串。

__annotations__持有全局注解


推荐阅读