- 我们都知道,Python中导入模块有两种方法,
import
和from...impo...
,其中,import
和from...import *
都可以导入模块中的所有方法,但当导入的模块中有__all__
魔术变量时,两者就有所不同了。 - 假设模块
test.py
中有三个方法A,B,C
,但是__all__ = ['A','B']
,这样的话,如果某程序导入该模块的方法为import
,仍然ABC
三个函数都可以调用,但当导入模块的方法是from...import *
时,只能调用变量__all__
中的A,B
两个函数。 - 开发者在写一个模块文件时,难免会有些方法需要进行测试,但如果测试代码就简单的放在文件中,其他程序在导入该模块时,会自动执行测试的代码,这肯定不是我们想要看到的,所以Python提供了魔术变量
__name__
来避免这种情况的发生:
当在模块文件中测试代码时,__name__
变量的值为__main__
,当在其他导入该模块的程序中运行时,__name__
变量的值为该文件的名称,因此,我们在写测试代码时,可以在前面加上一句
if __name__ == '__main__':
这样一来,只有当我们在运行模块文件时,才会执行这段测试代码。