假设我有一个名为module1
的模块,其中包含以下内容:
def main():
print 'K DawG'
main()
和module2
只有这一行:
import module1
基本上发生的是,当我运行module1
时,会按预期打印K DawG
,当我运行moudle2
时,除非我明确说明{{1} 不应该做任何事情,但它也打印module1.main()
为什么会这样? python是否运行导入期间导入的脚本?如果是这样,我怎么能阻止这种情况发生?
答案 0 :(得分:8)
是的,当然,脚本在导入时会执行。除非使用不同的编程语言,否则你无法改变这一事实。
解决方案通常是:
if __name__ == '__main__':
main()
这样,只有在使用python whatever.py
运行它时才会执行,但在导入时不会执行。
更详细地说明导入过程中会发生什么:
如果模块已在sys.modules
,则将返回该条目。否则,执行模块的代码,并将该文件中的全局变量存储在sys.modules
条目中。因此,只有在第一次导入模块时才执行其代码。