如何防止在Python中从导入的模块中执行模块代码?
如何防止在Python中从导入的模块中执行模块代码?
当我有以下文件时:\ntestone.py\n
if __name__ == "__main__": from testtwo import Fu class Foo: def bar(self): print 'barrr'
\ntesttwo.py\n
class Fu: def baz(self): print 'baz' Fu().baz() # 在模块内调用函数
\n如何在不运行模块testtwo.py中的函数的情况下,从文件testtwo.py导入类Fu?我尝试通过检查名称来解决这个问题。如果运行文件testone.py,将导致shell打印出baz。
在Python中,当你导入一个模块时,它会运行全局范围内的所有代码。所以没有办法阻止模块中的代码执行。但是,你可以通过改变代码的结构来实现需要时调用或不调用的效果。
首先,你可以将模块中的代码放在一个名为main()
的函数中:
def main(): Fu().baz()
然后,你可以使用if __name__ == '__main__':
语句来判断模块是作为主模块运行还是被导入到其他模块中。如果模块作为主模块运行,那么调用main()
函数。
下面是一个示例代码:
def main(): Fu().baz() if __name__ == '__main__': main()
当你想要调用该模块时,导入它并调用main()
函数。在你运行该模块作为主模块时,它仍然会自动运行。
通过这种方式,你可以控制模块中代码的执行,只在需要时调用。