Python中__main__的理解
1.概述
在Python中,每个.py文件称为一个模块(module), 每个module由会有它自己的attribute(官方翻译文档称为属性)。对于一个空的.py文件,它也至少包含9个内置attributes,这9个内置attribute如下:
['__annotations__', '__builtins__', '__cached__', '___doc_', '__file__', '__loader__', '__name__', '__package__', '__spec__']
1.1 内置attribute
比如,一个最简单的demo.py文件如下:
# demo.py
print(dir()) #dir()函数用以查看该Module的所有attribute
执行以后得到如下输出结果:
$python demo.py
['__annotations__', '__builtins__', '__cached__', '___doc_', '__file__', '__loader__', '__name__', '__package__', '__spec__']
1.2 定义一个新的变量
如果在demo.py中定义一个变量a,那么该module的attribute就会多一个:
# demo.py
a = 1 # 定义一个变量a
print(dir())
执行结果如下:(注意李彪最后多了个'a')
$python demo.py
['__annotations__', '__builtins__', '__cached__', '___doc_', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'a']
2 执行当前文件
如果当前文件被当做主程序(main program)执行时(注意Python没有main方法),那么当前文件/模块的__name__就会被定义为__main__,如:
#demo.py
print(__name__)
结果:
$python demo.py
__main__
- 作为被import的module
3.1 同级文件import
如果某.py文件/module作为被import的模块,那么该module的__name__将被定义为module的名字,如:
#demo.py
"""
.
|-- demo.py
|-- module.py
"""
from module import print_name
print_name()
#module.py
"""
.
|-- demo.py
|-- module.py
"""
def print_name():
print(__name__)
执行结果如下:
$python demo.py
module
3.2 不同级文件import
如果不同级某.py文件/module作为被import的模块,那么该module的__name__将被定义为module的名字,同时加上路径,如:
#demo.py
"""
.
|-- demo.py
|-- trash
| |-- module.py
"""
from trash.module import print_name
print_name()
#module.py
"""
.
|-- demo.py
|-- trash
| |--- module.py
"""
def print_name():
print(__name__)
执行结果如下:
$python demo.py
trash.module
浙公网安备 33010602011771号