为什么从Python文件导入函数时,文件内非函数的顶层代码会被执行?
问题原因
- Python在执行
import导入操作时,会完整执行被导入模块的所有顶层代码,不会只执行你指定导入的函数部分。 - 你写在
demostration_1.py里的print('hello world')属于顶层代码(既没有定义在函数、类内部,也没有被if __name__ == '__main__'判断包裹),所以当demostration_2.py导入adult函数时,这行打印代码自然就会被执行,才会出现额外的hello world输出。
解决方法
如果希望某段代码只有直接运行当前文件时才执行,被其他模块导入时不执行,只需要把这部分代码放到if __name__ == '__main__'的判断块里即可。修改后的demostration_1.py代码如下:
def adult(x): return x >= 18 if __name__ == '__main__': print('hello world')
- 当直接运行
demostration_1.py时,内置变量__name__的值会是'__main__',判断成立,打印语句会正常执行 - 当
demostration_1.py作为模块被其他文件导入时,__name__的值会变成模块名'demostration_1',判断不成立,打印语句就不会执行了
内容的提问来源于stack exchange,提问作者Daniel
相关产品推荐
相关产品推荐

