技术文摘
Python 中 append 与 + 在函数默认参数里的行为差异:append 为何修改原有列表而 + 创建新列表
2025-01-09 02:42:20 小编
Python 中 append 与 + 在函数默认参数里的行为差异:append 为何修改原有列表而 + 创建新列表
在 Python 编程中,函数默认参数是一个极为实用的特性,但其中 append 与 + 操作在默认参数里的行为差异,却常常让开发者感到困惑。理解这种差异,对写出高效、准确的代码至关重要。
先来看 append 的情况。当我们在函数默认参数中使用 append 时,它会直接修改原有列表。比如下面这个简单的示例:
def add_item(item, lst=[]):
lst.append(item)
return lst
print(add_item(1))
print(add_item(2))
在这个代码里,我们定义了一个 add_item 函数,默认参数 lst 是一个空列表。第一次调用函数时,它将 1 添加到这个空列表中,返回 [1]。第二次调用时,并没有创建一个新的空列表,而是在原来的 [1] 基础上添加 2,所以返回 [1, 2]。这是因为在 Python 中,函数的默认参数在函数定义时就被初始化,且只会初始化一次。后续调用函数时,如果没有传入新的 lst,就会一直使用最初初始化的那个列表对象,append 操作自然是在这个原有对象上进行修改。
再看看 + 操作。以如下代码为例:
def combine_list(item, lst=[]):
new_lst = lst + [item]
return new_lst
print(combine_list(1))
print(combine_list(2))
这里定义的 combine_list 函数,使用 + 操作将 item 与 lst 合并成一个新列表并返回。每次调用函数时,都会创建一个新的列表对象。第一次调用返回 [1],第二次调用返回 [2],而不是在 [1] 的基础上添加 2。这是因为 + 操作会创建一个新的列表,它并不会修改原有的 lst。每次调用函数时,即使默认参数 lst 是同一个对象,但 + 操作产生的是全新的列表实例。
在函数默认参数场景下,append 会修改原有列表对象,而 + 操作会创建新的列表。开发者在使用时一定要清晰这一差异,根据实际需求选择合适的操作,避免因不理解导致程序出现意外的行为。
- BeautifulSoup中find_all提取元素含回车符的处理方法
- 快速指南:运行本地LLM及发出API请求
- 科大讯飞Websockets API持续连接断开问题及正确发送音频数据包方法
- 探秘教师库:结构化与非结构化数据及途中乐趣
- 科大讯飞 Websockets API 语音转写收不到消息的原因
- unittest找不到测试文件?教你用unittest discover运行所有测试
- Python单元测试无法识别文件 如何使用unittest discover命令
- 科大讯飞Websockets API连接关闭异常:帧数据包问题解决方法
- BeautifulSoup提取带回车符的列表元素的正确处理方法
- functools.partial究竟修饰了哪个对象
- AI转录应用程序
- 被 Python functools.partial 修饰的对象是什么
- Python functools.partial:怎样查看被可调用对象修饰的原始函数或类
- Python获取functools.partial修饰对象的原始函数方法
- Asyncio中await为何无效 正确实现异步任务并发执行的方法