python默认参数问题

参考教程:

https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/001431752945034eb82ac80a3e64b9bb4929b16eeed1eb9000

测试代码:

#default parameter of list
def power(l=[]):
    l.append('END')
    print(l,id(l))
    return l
power()
power()

#default parameter of int
def plus(a=0):
    a+=10
    print(id(a),a)
    return a
plus()
plus()

#defualt parameter of str
def sayhello(who='you'):
    print(who,'say hello',id(who))
sayhello()
sayhello()

#test list
l1=[1,2,3]
print(l1,id(l1))
l1.append(4)
print(l1,id(l1))

#test str
s1='hello'
print(s1,id(s1))
s1='go'
print(s1,id(s1))

#test int
i1=5
print(i1,id(i1))
i1=10
print(i1,id(i1))

输出:

['END'] 413969891080
['END', 'END'] 413969891080
1435266352 10
1435266352 10
you say hello 413969881664
you say hello 413969881664
[1, 2, 3] 413969982088
[1, 2, 3, 4] 413969982088
hello 413969882112
go 413969900128
5 1435266192
10 1435266352

分析:

参考教程中指出使用默认参数的一个陷阱在于以list这种可修改的变量作为默认参数调用后值可能会被修改,已验证。同时测试了int和str两种类型,str为不可修改类型,hello 和 go即可说明,s1指向不同的对象,内存地址发生了变化;int同str类似,若修改变量值,其指向对象也变化。因此使用int,str等不可修改的变量作为默认参数是可靠的。

tips:

之所以记录下来时因为对int类型的修改后指向对象发生变化的认识存在遗漏

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值