为了说明我遇到的问题,请考虑以下内容。我有两个 .py 文件,一个名为 main.py
,另一个名为 mymodule.py
。它们都在同一个目录中。
main.py
的内容:
from mymodule import myfunction
myfunction()
mymodule.py
的内容:
def myfunction():
for number in range(0,10):
print(number)
print("Hi")
我的印象是导入一个函数只会导入那个函数。然而,当我运行 main.py
时,这是我得到的:
Hi
0
1
2
3
4
5
6
7
8
9
为什么调用 print("Hi")
?它不是我导入的函数的一部分!
最佳答案
I was under the impression that importing a function would only import that function.
似乎对于 from-import 的实际作用有一个不正确的假设。
第一次导入模块时,导入语句将执行整个模块,包括在全局范围内进行的 print
调用 (docs)。无论 mymodule
是首先使用 import mymodule
语句还是使用 from mymodule import myfunction
语句导入,都是如此。
同一模块的后续导入将重新使用缓存在 sys.modules
中的现有模块,这可能是您误以为整个模块未执行的原因。
有一种通用模式可以避免模块导入执行全局级代码。通常您会发现在条件语句中不打算在导入时执行的代码,如下所示:
def myfunction():
for number in range(0,10):
print(number)
if __name__ == "__main__":
print("Hi")
关于python - 从另一个 .py 文件导入函数导入的不仅仅是那个函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51142373/