问题:在 Python 中,解释以下代码并说明输出结果:
def foo(x, items=[]):items.append(x)return itemsprint(foo(1))
print(foo(2))
print(foo(3))
答案:
这段代码定义了一个名为 foo 的函数,该函数接受两个参数:x 和 items,其中 items 是一个默认参数,其默认值为一个空列表 []。
每次调用 foo 函数时,参数 x 的值都会被追加到 items 列表中,并返回修改后的列表。
输出结果如下:
[1]
[1, 2]
[1, 2, 3]
这是因为在 Python 中,默认参数在函数定义时被创建,并在每次调用函数时共享。因此,每次调用 foo 函数时,都使用相同的默认参数 items,导致 items 列表持续累积值。
如果想要避免这种行为,可以将默认参数设置为 None,并在函数内部进行检查和初始化,如下所示:
def foo(x, items=None):if items is None:items = []items.append(x)return itemsprint(foo(1))
print(foo(2))
print(foo(3))
这样可以确保在每次调用函数时都会得到一个新的空列表,避免共享默认参数的问题。