标签:面试题 mylist python 默认 0908 add print id append
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]
标签:面试题,mylist,python,默认,0908,add,print,id,append 来源: https://www.cnblogs.com/qiyuedetiankong/p/10610114.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。