面试题答案
一键面试特殊情况
当函数默认值为可变对象时,默认值只会在函数定义时被创建一次。如果在函数内部对这个可变对象进行修改,那么下次调用函数时,默认值将是上次修改后的结果,而不是初始的默认值。这可能导致不符合预期的行为。
避免错误的方法
通常使用 None
作为默认值,然后在函数内部进行判断,如果为 None
则创建新的可变对象。
代码示例
# 错误示例
def bad_function(my_list=[]):
my_list.append(1)
return my_list
print(bad_function())
print(bad_function())
# 正确示例
def good_function(my_list=None):
if my_list is None:
my_list = []
my_list.append(1)
return my_list
print(good_function())
print(good_function())
在错误示例中,每次调用 bad_function
时,my_list
都是同一个对象,导致每次调用都会在上次修改的基础上继续修改。而在正确示例中,每次调用 good_function
时,如果 my_list
为 None
,则会创建一个新的列表,避免了上述问题。