测开笔试题分享01

问题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]

以后看到类似的问题,希望大家别再踩坑了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值