Py学习  »  Python

在这种情况下,python如何避免无限递归?

user32882 • 6 年前 • 428 次点击  

我正在使用接受的答案 this question 为了更好地理解为什么需要使用 if __name__=='__main__' 用python构造。我从答案中了解到,如果 foo.py 从命令行运行时使用 python foo.py 然后是变量 __name__ 分配的值为 '__main__' 所以里面的一切 如果uuu name_uuu==''uu main_uuu' 块被执行。另一方面,如果模块是使用 import foo 然后 第二代 分配的值为 "foo" . 所以里面的东西 if 未执行块。

然后,答案显示了一个使用 foo2.py foo3.py 并建议比较结果。代码 foo2 是:

# Suppose this is foo2.py.

def functionA():
    print("a1")
    from foo2 import functionB
    print("a2")
    functionB()
    print("a3")

def functionB():
    print("b")

print("t1")
if __name__ == "__main__":
    print("m1")
    functionA()
    print("m2")
print("t2")

代码 foo3 是:

# Suppose this is foo3.py
def functionA():
    print("a1")
    from foo3 import functionB
    print("a2")
    functionB()
    print("a3")

def functionB():
    print("b")

print("t1")
print("m1")
functionA()
print("m2")
print("t2")

然后我用 python foo2.py python foo3.py 分别。以下是我得到的结果:

(base) D:\TEMP\try>python foo2.py
t1
m1
a1
t1
m1
a1
a2
b
a3
m2
t2
a2
b
a3
m2
t2

我对第二个有点困惑( Fo.3.Py )什么时候? functionB 我期待的进口货

t1
m1
a1
t1
m1
a1
t1
m1
a1
... to infinity

筑巢以来 函数B 在里面 functionA 将导致无限递归。然而,python“知道”以某种方式避免了这一点…

这里的逻辑是什么?这是怎么发生的?

谢谢。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/31392
 
428 次点击  
文章 [ 2 ]  |  最新文章 6 年前