gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 07:42:06 24 4
gpt4 key购买 nike

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

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 都会创建一个新的堆栈框架,其中包含新的局部变量实例

关于python - 为什么 p 永远不会超过 2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17913377/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com