📅  最后修改于: 2023-12-03 15:19:13.383000             🧑  作者: Mango
在Python中,当我们使用 import
导入一个模块时,该模块的代码就会被执行。有时候我们希望只是导入该模块的某些函数或类,而不执行其余的代码。本文将介绍如何在Python中实现这样的功能。
在Python中,当我们执行一个脚本时,__name__
变量的值为 '__main__'
,而当我们使用 import
导入一个模块时,__name__
变量的值为该模块的名称。因此,我们可以通过判断 __name__
变量的值来确定是否需要执行代码。具体实现如下所示:
# module.py
def foo():
pass
if __name__ == '__main__':
print('This code will only be executed when module.py is run directly.')
当我们导入 module.py
时,print
语句将不会执行:
import module
# Output:
而当我们直接运行 module.py
时,print
语句将被执行:
$ python module.py
# Output: This code will only be executed when module.py is run directly.
在Python中,每个模块都会在 sys.modules
字典中对应一个 key-value 对,其中 key 为模块的名称,value 为该模块的对象。我们可以通过 sys.modules[__name__]
来获取当前模块的对象,从而避免在导入时执行某些代码。具体实现如下:
# module.py
def foo():
pass
if sys.modules[__name__] == '__main__':
print('This code will only be executed when module.py is run directly.')
当我们导入 module.py
时,print
语句将不会执行:
import module
# Output:
而当我们直接运行 module.py
时,print
语句将被执行:
$ python module.py
# Output: This code will only be executed when module.py is run directly.
以上两种方法都可以用来避免在导入模块时执行某些代码,从而减少不必要的资源消耗。第一种方法更加常用,因为它更简洁易懂,而且在大多数情况下都能够满足我们的需求。至于第二种方法,由于它需要访问 sys.modules
字典,因此可能会比第一种方法略微慢一些。