【发布时间】:2021-05-07 12:21:24
【问题描述】:
我对函数变量范围有点困惑,有时函数会跟踪其局部变量,因此如果再次调用它,它会调用变量的先前值 - 有时它不会跟踪值.
在以下代码中,该函数跟踪mylist 并在每次调用时附加到它。
def test(mylist=[]):
mylist.append(1)
print (mylist)
test()
test()
test()
输出:
[1]
[1, 1]
[1, 1, 1]
虽然在下面的代码中,x 在每次调用函数时都设置为零。
def test(x=0):
x+=1
print (x)
test()
test()
test()
输出:
1
1
1
这种行为的解释是什么?
另外,有没有办法从外部查看函数内部变量的当前值?
[更新]
在cmets之后,我现在明白为什么mylist更新了,但是第二种情况x呢?为什么不更新?是因为x 是不可变的,而mylist 是可变的吗?
【问题讨论】:
-
函数不会跟踪从一个调用到下一个调用的值。第一个中发生的事情是默认参数的怪癖,强烈建议避免使用,除非你有充分的理由,根据@0x5453 的链接。