Python默认参数的记忆性
时间: 2023-12-05 13:39:41 浏览: 27
Python中的默认参数是指在定义函数时,为参数指定一个默认值。当函数被调用时,如果没有传递该参数,则使用默认值。默认参数的记忆性是指当默认参数是可变对象时,该对象在函数调用之间会被记忆,即如果在一个函数调用中修改了该默认参数的值,则下一次调用该函数时,该参数的默认值将是上一次修改后的值。
下面是一个例子来说明Python默认参数的记忆性:
```python
def add_item(item, lst=[]):
lst.append(item)
return lst
print(add_item(1)) # 输出 [1]
print(add_item(2)) # 输出 [1, 2],而不是期望的 [2]
```
在上面的例子中,我们定义了一个函数`add_item`,它有两个参数:`item`和`lst`,其中`lst`是一个默认参数,它的默认值是一个空列表`[]`。在函数体中,我们将`item`添加到`lst`中,并返回`lst`。
我们先调用`add_item(1)`,它会返回``,这是我们期望的结果。但是,当我们再次调用`add_item(2)`时,它返回的是`[1, 2]`,而不是我们期望的``。这是因为在第一次调用`add_item`时,Python会记忆`lst`的默认值`[]`,并在下一次调用`add_item`时重复使用该列表,因此在第二次调用中,`lst`的默认值已经被修改为``,并且`2`被添加到了该列表中。
为了避免这种情况,我们可以将默认参数设置为不可变对象,例如`None`,并在函数体中创建一个新的可变对象。下面是修改后的代码:
```python
def add_item(item, lst=None):
if lst is None:
lst = []
lst.append(item)
return lst
print(add_item(1)) # 输出 [1]
print(add_item(2)) # 输出 [2]
```
在上面的代码中,我们将`lst`的默认值设置为`None`,并在函数体中检查`lst`是否为`None`,如果是,则创建一个新的空列表。这样,每次调用`add_item`时,都会创建一个新的列表,避免了默认参数的记忆性问题。