Python默认参数混乱

时间:2018-06-06 12:43:48

标签: python arguments default evaluation

由于我是python的新手,我已经开始了默认参数的主题 根据定义,我已经理解默认参数只被评估一次,并且在函数定义时,但是这个代码片段产生了混淆

def f(a, L=None):
    if L is None:
        L = []
    L.append(a)
    return L

在上面的代码中L是一个变量 修改为在第一个函数调用上列出 实例F(1) 但即使是第二次调用函数时,L也会被修改为列表 ex .. f(1)         F(2) 结果在[1]                    [2] 您能否真正准确地解释上述代码评估是如何完成的?

2 个答案:

答案 0 :(得分:1)

每次在没有第二个参数的情况下调用f时,都会创建一个新列表。如果要重用列表,则需要存储f

的结果
new_list = f(1)
f(2, new_list)
print(new_list)

将输出[1,2]

答案 1 :(得分:0)

您可以阅读此内容,以便更好地理解传递https://www.python-course.eu/passing_arguments.php

的python参数

长话短说 - 你不能覆盖参数的值,你只能创建指向新列表的局部变量L,它会影响参数L。但是,在函数参数L的下一次调用仍然是None时,除非它将被传递