我是python的新手,我只是在尝试使用将功能从一个模块导入另一个模块from module_name import function
。但是,当我导入函数时,它也会导入并执行for循环,该循环不是函数的一部分,而是模块的一部分。
模块1:
from Fibonacci import fibonacci
fibonacci(10)
单元2:
def fibonacci(Number):
for i in range(1,Number+1):
if i == 1:
sumCount = 0
First = 0
elif i ==2:
Second = 1
sumCount = 1
else:
sumCount = First + Second
First = Second
Second = sumCount
print(sumCount)
for F in range(1,10):
fibonacci(F)
当我导入函数fibonacci时,将执行for循环。为什么会这样,我该如何停止呢?
关于“为什么”执行,并没有真正的误解,python就是这种方式。
该文件说:
from表单使用的过程稍微复杂一些:
- 找到from子句中指定的模块,并在必要时进行加载和初始化;
- 对于import子句中指定的每个标识符:
- 检查导入的模块是否具有该名称的属性
- 如果不是,请尝试导入具有该名称的子模块,然后再次检查导入的模块的该属性
- 如果找不到该属性,则会引发ImportError。
- 否则,对该值的引用存储在本地名称空间中,使用as子句中的名称(如果存在),否则使用属性名称
并且(这里是参考资料):
一个模块可以包含可执行语句以及函数定义。这些语句旨在初始化模块。仅在import语句中第一次遇到模块名称时才执行它们。(如果文件作为脚本执行,它们也会运行。)
这回答了问题“为什么”。即使您从模块中加载单个函数,该模块仍将初始化(以这种方式运行是有意义的)。因此,将执行任何“免费”代码。
这意味着除非将“ free”语句用于初始化模块,否则不应将它们放入模块中。
为防止此行为,请使用if __name__ == "main":
其他答案所述的语句。将if
所有仅在直接调用模块时应执行的代码放入其中(例如,用于测试的代码)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句