题目
单选题(本题分值:1分)1 根据以下函数代码块,最终运行结果是什么?def demo(newitem, old_list=[]):old_list.append(newitem)return old_listprint(demo('a'))print(demo('b'))A. 运行错误B. ['a']['a', 'b']C. ['a', 'b']
单选题(本题分值:1分)
1 根据以下函数代码块,最终运行结果是什么?
def demo(newitem, old_list=[]):
old_list.append(newitem)
return old_list
print(demo('a'))
print(demo('b'))
A. 运行错误
B. ['a']['a', 'b']
C. ['a', 'b']
题目解答
答案
B. ['a']['a', 'b']
解析
本题考查Python中可变默认参数的特性。关键点在于理解默认参数的生命周期:默认参数在函数定义时初始化,后续调用若不显式传参,将共享同一对象。本题中,old_list 是默认的空列表,两次调用 demo 时,第二次会直接修改第一次的列表,导致输出结果叠加。
函数默认参数的特性
- 默认参数只初始化一次:
old_list=[]在函数定义时创建,后续调用若不传参,始终使用同一列表对象。 - 可变对象的修改会保留状态:
append操作会直接修改默认参数的列表,状态会被保留到下次调用。
两次调用过程
- 第一次调用
demo('a'):old_list为默认空列表[]。- 执行
append('a'),列表变为['a']。 - 返回
['a'],打印输出['a']。
- 第二次调用
demo('b'):old_list仍为第一次调用后的列表['a']。- 执行
append('b'),列表变为['a', 'b']。 - 返回
['a', 'b'],打印输出['a', 'b']。