♣
题目部分(原文见公众号:python宝)
python宝:
https://mp.weixin.qq.com/mp/profile_ext?action=home&__biz=MzU5NjIyOTE4OQ==&scene=123#wechat_redirect
小麦苗DB宝:
https://mp.weixin.qq.com/mp/appmsgalbum?action=getalbum&__biz=MzIzOTA2NjEzNQ==&scene=1&album_id=1407409723808366593&count=3#wechat_redirect
小麦苗个人博客:https://www.xmmup.com/
♣
答案部分
一、说出下面list1,list2,list3的输出值
def appendList(val, list=[]):
list.append(val)
return list
list1 = appendList(10)
list2 = appendList(123,[])
list3 = appendList('a')
print("list1 = %s" % list1) # [10, 'a']
print("list2 = %s" % list2) # [123]
print("list3 = %s" % list3) # [10, 'a']
许多人会错误的认为 list1 应该等于 [10] 以及 list3 应该等于 ['a']。认为 list 的参数会在 extendList 每次被调用的时候会被设置成它的默认值 []。
尽管如此,实际发生的事情是,新的默认列表仅仅只在函数被定义时创建一次。随后当 extendList 没有被指定的列表参数调用的时候,其使用的是同一个列表。这就是为什么当函数被定义的时候,表达式是用默认参数被计算,而不是它被调用的时候。
因此,list1 和 list3 是操作的相同的列表。而list2是操作的它创建的独立的列表(通过传递它自己的空列表作为list参数的值)
所以这一点一定要切记切记.下面我们把list置为None就可以避免一些麻烦了
二、说出下面list1,list2,list3的输出值
def appendList(val, list=None):
if list is None:
list = []
list.append(val)
return list
list1 = appendList(10)
list2 = appendList(123,[])
list3 = appendList('a')
print("list1 = %s" % list1) # [10]
print("list2 = %s" % list2) # [123]
print("list3 = %s" % list3) # ['a']
About Me:小麦粒
● 本文作者:小麦粒,专注于python、数据分析、数据挖掘、机器学习相关技术,也注重技术的运用
● 作者博客地址:https://blog.csdn.net/u010986753
● 本系列题目来源于作者的学习笔记,部分整理自网络,若有侵权或不当之处还请谅解
● 版权所有,欢迎分享本文,转载请保留出处
● 个人微信号:pythonbao 联系我加微信群
● 个人QQ:87605025
● QQ交流群py_data :483766429
● 公众号:python宝 或 DB宝
● 提供OCP、OCM和高可用最实用的技能培训
● 题目解答若有不当之处,还望各位朋友批评指正,共同进步
如果你觉得到文章对您有帮助,点击下方我的头像,赞赏我哦!
有您的支持,小麦粒一定会越来越好!