python是否在导入时执行导入

时间:2013-09-26 13:02:42

标签: python python-import

假设我有一个名为module1的模块,其中包含以下内容:

def main():
    print 'K DawG'

main()

module2只有这一行:

import module1

基本上发生的是,当我运行module1时,按预期打印K DawG,当我运行moudle2时,除非我明确说明{{1} 不应该做任何事情,但它也打印module1.main()

为什么会这样? python是否运行导入期间导入的脚本?如果是这样,我怎么能阻止这种情况发生?

1 个答案:

答案 0 :(得分:8)

是的,当然,脚本在导入时会执行。除非使用不同的编程语言,否则你无法改变这一事实。

解决方案通常是:

if __name__ == '__main__':
    main()

这样,只有在使用python whatever.py运行它时才会执行,但在导入时不会执行。


更详细地说明导入过程中会发生什么:

如果模块已在sys.modules,则将返回该条目。否则,执行模块的代码,并将该文件中的全局变量存储在sys.modules条目中。因此,只有在第一次导入模块时才执行其代码。