python的默认参数问题测试代码解析
程序员文章站
2022-05-16 20:26:46
测试代码:
#default parameter of list
def power(l=[]):
l.append('end')
print(l,id(l))
r...
测试代码:
#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类型的修改后指向对象发生变化的认识存在遗漏
上一篇: 抓狂的学校生活
下一篇: 恋爱变心了的学校专业版
推荐阅读
-
python的默认参数问题测试代码解析
-
Python实现一个简单三层神经网络的搭建及测试 代码解析
-
Python 模块的参数可以用字典么?哪位大神看看我的代码哪里有问题,报错信息也在的
-
深入讨论Python函数的参数的默认值所引发的问题的原因
-
深入讨论Python函数的参数的默认值所引发的问题的原因
-
python的默认参数问题测试代码解析
-
深入讨论Python函数的参数的默认值所引发的问题的原因
-
Python在函数中使用列表作为默认参数的介绍(代码示例)
-
Python在函数中使用列表作为默认参数的介绍(代码示例)
-
Python 模块的参数可以用字典么?哪位大神看看我的代码哪里有问题,报错信息也在的