需求:程序当作模块被导入的时候,不希望执行里面的结果(例如print等语句);当作文件被执行的时候,直接执行里面的结果
1.模块导入的特性
- 模块具有一个
__name__
特殊属性 - 当模块文件直接执行的时候,
__name__
的值为__main__
- 当模块被另一个文件导入的时候,
__name__
的值就是该模块的名字
# 下面有foo.py和bar.py两个程序
# cat foo.py
print(__name__)
# cat bar.py
import foo
##############################
#执行foo.py看结果
# python foo.py
__main__
>>> import foo
foo
#执行bar.py看结果
#执行bar.py, bar.py的内容是import foo,导入foo模块,foo模块的内容是print(__name__),因为是执行bar模块才导致foo模块的运行,所以__name__的值就是foo
# python bar.py
foo
>>> import bar
foo
#总结:直接运行是main,间接运行是模块名
2.示例
# cat star.py
"""演示模块
这是一个演示用的模块,它包括了一个变量和函数
"""
hi = 'Hello World!'
def pstar(n=30):
"该函数通常用于打印星号,如果没有传参,则默认打印30个星号"
print('*' * n)
#该star.py如果直接被执行,就执行下面三行代码;如果被间接执行就跳过下面三行代码!
if __name__ == '__main__':
print(hi)
pstar()
pstar(50)
执行看效果:
# python star.py
Hello World!
******************************
**************************************************
>>> import star #无输出
>>>