函数定义中的Python变量范围[重复]

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了函数定义中的Python变量范围[重复]相关的知识,希望对你有一定的参考价值。

这个问题在这里已有答案:

我对以下Python代码感到非常惊讶

def f(x,l=[]):
    for i in range(x):
        l.append(i*i)
    print(l) 

f(2) #[0, 1]
f(3) #[0, 1, 0, 1, 4]

问题是为什么Python使用相同的l列表,当在函数定义中始终定义为l=[]

答案

默认值在函数定义时绑定。将字典或列表指定为默认值时,这是常见的“问题”。

有关其他一些细节,请参阅this blog post,其中有一个关于可变默认值的部分。

当python解释器首次看到函数定义时,您可以将其视为创建对象并将其绑定到形式参数名称。从那时起,当调用该函数时,如果不存在用户提供的值,则向该函数提供相同的可变对象。

一开始肯定是一个惊喜,但适合python做事的方式。

另一答案

因为它在函数定义中创建一个空列表,并将对该对象的引用设置为默认参数。此默认引用始终指向同一对象。

以上是关于函数定义中的Python变量范围[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何更改函数中变量的范围? Python [重复]

Python函数

python中的闭包

Python函数式编程,范围和变量。我哪里错了?

如何在Python中定义静态变量

12_关于flask中的宏