Python模块与包

2021-01-15 19:15

阅读:634

  一个Python文件有两种用途,一种被当主程序/脚本执行,另一种被当模块导入,为了区别同一个文件的不同用途,每个py文件都内置了__name__变量,该变量在py文件被当做脚本执行时赋值为“__main__”,在py文件被当做模块导入时赋值为模块名。

  作为模块foo.py的开发者,可以在文件末尾基于__name__在不同应用场景下值的不同来控制文件执行不同的逻辑

#foo.py
...
if __name__ == __main__:
    foo.py被当做脚本执行时运行的代码
else:
    foo.py被当做模块导入时运行的代码

  通常我们会在if的子代码块中编写针对模块功能的测试代码,这样foo.py在被当做脚本运行时,就会执行测试代码,而被当做模块导入时则不用执行测试代码。

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

# 这是一个模块
print("模块foo --->")
x = 1

def get():
    print(x)

def change():
    global x
    x = 0

if __name__ == __main__: # Ps:由于导入模块时会先执行一遍模块文件。故可以采用此种方式做功能测试
    get()
else:
    print("不运行get..")

"""
执行结果如下:
    1.当将foo.py当做主程序运行时,会 print("模块foo --->") 后 执行get()方法。
    2.当将foo.py当做模块进行导入时,会 print("模块foo --->") 后 print("不运行get..") 。
"""


评论


亲,登录后才可以留言!