0

假设我有一个名为module1以下内​​容的模块:

def main():
    print 'K DawG'

main()

只有module2这一行:

import module1

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

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

4

1 回答 1

8

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

解决方案通常是这样的:

if __name__ == '__main__':
    main()

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


要更详细地了解导入期间发生的情况:

如果模块已经在 中sys.modules,则该条目将被返回。否则,执行模块的代码并将该文件中的全局变量存储在sys.modules条目中。所以只有当你第一次导入一个模块时,它的代码才会被执行。

于 2013-09-26T13:04:27.880 回答