函数定义中的Python变量范围

2024-04-25 14:29:25 发布

您现在位置: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列表,而in函数定义总是定义为l=[]


Tags: 函数代码in列表for定义defrange
2条回答

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

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

有关其他详细信息,请参见this blog post,其中有一节介绍可变默认值。你知道吗

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

一开始这当然是一个惊喜,但它符合python的工作方式。你知道吗

相关问题 更多 >