Python 为什么从模块导入函数会导入整个模块?
我是python新手,我正在测试使用Python 为什么从模块导入函数会导入整个模块?,python,Python,我是python新手,我正在测试使用from module\u 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
from module\u 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循环。为什么会出现这种情况?如何停止这种情况?在模块2中,将for循环放在检查是否为main的内部
def fibonacci(Number):
for i in range(1,Number):
...
return N
if __name__ == '__main__':
for F in range(1,10):
fibonacci(F)
请参阅以了解为什么执行它的“为什么”并没有真正的疑问,python就是这样工作的 他们说: from表单使用稍微复杂一些的过程:
为了防止这种行为,请像其他答案所说的那样,使用
if\uuu name\uuu==“main”:
语句。如果只有在直接调用模块时才应执行的所有代码(例如,用于测试目的的代码)。是否确定不属于def
的循环正在执行?是的,输出为:0 1 1 2 3 5 8 13 21如果uu name uu==“main”,则可以使用:
@youssef这是可行的,但是为什么要通过函数来完成呢?import
s在AST级别不起作用,而是对整个模块进行求值,然后拉出其命名空间中的对象。这种设计有很多优点——模块定义可以包含修改对象的代码,因为整个模块一次运行,除了第一个import
外,其他所有模块都非常快,因为生成的对象可以缓存。这并不能回答问题,这是一个解决方案,但是他问如果他只导入了这个函数,为什么这个函数就可以运行。嗨,谢谢你,但是为什么它要与这个函数一起导入呢?嘿,看这篇之前的stackoverflow帖子,@kudeh谢谢,这个链接非常有用