Skip to main content
 首页 » 编程设计

python之为什么 p 永远不会超过 2

2025年05月04日15lautakyan007

我在玩递归,结果是这样的:

n = 0 
 
def func(f) : 
    print("setting p to 1")  #NEW# 
    p = 1 #local var 
    global n 
    n+=1 
    print(n) 
    if n > 5 : 
        print("returning") 
        return 
    print("calling f(f) with id() of " + str(id(f))) 
    f(f) 
    print("incrementing p") #NEW# 
    p +=1 
    print("p = " + str(p)) 
 
print(str(id(func))) 
func(func) 

好吧,我的问题是,如果 f 始终是相同的 id(确实如此),因此始终是相同的对象(我敢打赌这就是我在某种程度上出错的地方),p 不应该是相同的 p 并因此递增超过 2 吗?相反,它将每个 p 视为不同对象的本地对象。

输出:

178374636 
1 
calling f(f) with id() of 178374636 
2 
calling f(f) with id() of 178374636 
3 
calling f(f) with id() of 178374636 
4 
calling f(f) with id() of 178374636 
5 
calling f(f) with id() of 178374636 
6 
returning 
p = 2 
p = 2 
p = 2 
p = 2 
p = 2 

带有新评论的新输出

178374572 
setting p to 1 
1 
calling f(f) with id() of 178374572 
setting p to 1 
2 
calling f(f) with id() of 178374572 
setting p to 1 
3 
calling f(f) with id() of 178374572 
setting p to 1 
4 
calling f(f) with id() of 178374572 
setting p to 1 
5 
calling f(f) with id() of 178374572 
setting p to 1 
6 
returning 
incrementing p 
p = 2 
incrementing p 
p = 2 
incrementing p 
p = 2 
incrementing p 
p = 2 
incrementing p 
p = 2 

请您参考如下方法:

p 是一个局部变量,与 func 始终具有相同 id 的事实无关。每次调用 func 都会创建一个新的堆栈框架,其中包含新的局部变量实例