问题1:f1.array和f2.array的输出是多少?
class Foo:
def __init__(self, array=[]):
self.array = array
f1 = Foo()
f2 = Foo()
f1.array.append(1)
输出的内容为:f1=[1]
f2=[1]
该题涉及一个python常见的坑,就是函数或类的默认值是可变类型(如列表、字典等)时,这个默认值在函数定义时就会被创建并分配给参数。当函数被调用时,如果没有显式地传递该参数,函数将使用该默认值。
也就是说,当f1实力化类的时候把1传入,并添加到了列表array中,当f2实例化的时候并没有把列表置为空,所以还是为1,函数也存在该问题,可以通过增加判断来优化该问题,默认为空,判断是否为空,如果为空则初始化一个空的列表
def append_to_list(value, my_list=None):
if my_list is None:
my_list = []
my_list.append(value)
return my_list
result1 = append_to_list(1)
print(result1) # 输出 [1]
result2 = append_to_list(2)
print(result2) # 输出 [1, 2]
现在来优化第一个代码,并解决该问题
class Foo:
def __init__(self, array=None):
if array is None:
array = []
self.array = array
f1 = Foo()
f2 = Foo()
f1.array.append(1)
f2.array.append(2)
print(f1.array)
print(f2.array)
#输出[1]
#输出[2]
以后看到类似的问题,希望大家别再踩坑了