2024-04-25 14:29:25 发布
网友
我对下面的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=[]
l
l=[]
因为它在函数定义处创建一个空列表,并将对该对象的引用设置为默认参数。此默认引用始终指向同一对象。你知道吗
默认值在函数定义时绑定。在将字典或列表指定为默认值时,这是一个常见的“问题”。你知道吗
有关其他详细信息,请参见this blog post,其中有一节介绍可变默认值。你知道吗
当python解释器第一次看到函数定义时,可以将其视为创建对象并将其绑定到形式参数名。从那时起,当调用函数时,如果不存在用户提供的值,则向函数提供相同的可变对象。你知道吗
一开始这当然是一个惊喜,但它符合python的工作方式。你知道吗
因为它在函数定义处创建一个空列表,并将对该对象的引用设置为默认参数。此默认引用始终指向同一对象。你知道吗
默认值在函数定义时绑定。在将字典或列表指定为默认值时,这是一个常见的“问题”。你知道吗
有关其他详细信息,请参见this blog post,其中有一节介绍可变默认值。你知道吗
当python解释器第一次看到函数定义时,可以将其视为创建对象并将其绑定到形式参数名。从那时起,当调用函数时,如果不存在用户提供的值,则向函数提供相同的可变对象。你知道吗
一开始这当然是一个惊喜,但它符合python的工作方式。你知道吗
相关问题 更多 >
编程相关推荐