如何让Python函数首次返回初始列表并清空,二次执行返回空列表?
问题分析与解决方案
原代码的问题
- 函数内的
items是局部变量,每次调用remove()都会重新初始化这个列表,永远不会为空。 - 返回语句
return items and items.clear()逻辑错误:items.clear()方法会清空列表但返回None,所以items and None的结果是None,无法返回初始列表。
修复后的代码
要实现“首次返回初始列表并清空,后续返回空列表”的效果,需要让列表的状态在函数调用之间保持,这里可以利用函数默认参数只会初始化一次的特性:
def remove(items=["car", "plane", "bus"]): if items: # 先拷贝当前列表作为返回值 result = items.copy() # 清空原列表 items.clear() return result # 列表为空时直接返回 return items print(remove()) # 输出: ["car", "plane", "bus"] print(remove()) # 输出: []
另一种实现方式(闭包)
如果不想用默认参数,也可以用闭包来维护状态:
def make_remove(): items = ["car", "plane", "bus"] def remove(): nonlocal items if items: result = items.copy() items.clear() return result return items return remove remove = make_remove() print(remove()) # 输出: ["car", "plane", "bus"] print(remove()) # 输出: []
内容的提问来源于stack exchange,提问作者asd asd
相关产品推荐
相关产品推荐

