社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

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

user32882 • 6 年前 • 427 次点击  

我正在使用接受的答案 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
 
427 次点击  
文章 [ 2 ]  |  最新文章 6 年前