经典面试题-python函数之默认参数

1、可变的默认参数----list 

示例:

def add(a, mylist=[]):
    # print(id(mylist))
    mylist.append(a)
    return mylist
print(add(5))
print(add(6))
print(add(6, ["0908"]))
print(add(7))

输出结果:

预期输出实际输出
[5]
[6]
['6', 9008]
[ 7]
[5]
[5, 6]
['0908', 6]
[5, 6, 7]

 查看其id

def add(a, mylist=[]):
    print("mylist_id=",id(mylist))
    mylist.append(a)
    return mylist
print("mylist=",add(5))
print("mylist=",add(6))
print("mylist=",add(6, ["0908"]))
print("mylist=",add(7))

output

mylist_id= 51050248
mylist= [5]
mylist_id= 51050248
mylist= [5, 6]
mylist_id= 51026632
mylist= ['0908', 6]
mylist_id= 51050248
mylist= [5, 6, 7]

从输出结果可以看出,在第1,2,4次调用时,mylist的内存地址是不变的,mylist是列表属于可变对象,对其进行操作时,不会重新分配地址,append函数是将元素添加到列表的最后面,所以每次输出时将新的参数添加到列表的最后面

第3次调用时,mylist的内存地址改变,重新创建对象,所以将默认参数先赋值,然后再将6添加到列表中

优化

def add(a, mylist=[]):
    if  mylist is not None:#将列表清空
        mylist=[]
        print("mylist_id=",id(mylist))
        mylist.append(a)
    return mylist
print("mylist=",add(5))
print("mylist=",add(6))
print("mylist=",add(6, ["0908"]))
print("mylist=",add(7))

output

mylist_id= 56728264
mylist= [5]
mylist_id= 56728264
mylist= [6]
mylist_id= 56753928
mylist= [6]
mylist_id= 56753928
mylist= [7]

 

转载于:https://www.cnblogs.com/qiyuedetiankong/p/10610114.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值