【244】Python 说出下面list1,list2,list3的输出值(新的默认列表仅仅只在函数被定义时创建一次)...

 
 

67248e8016e67005dd64ca84a8c03c20.gif

题目部分(原文见公众号: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']

50f55ead83fc73ea492b0295377f5ca9.jpeg

About Me:小麦粒

● 本文作者:小麦粒,专注于python、数据分析、数据挖掘、机器学习相关技术,也注重技术的运用

● 作者博客地址:https://blog.csdn.net/u010986753

● 本系列题目来源于作者的学习笔记,部分整理自网络,若有侵权或不当之处还请谅解

● 版权所有,欢迎分享本文,转载请保留出处

● 个人微信号:pythonbao 联系我加微信群

● 个人QQ:87605025

● QQ交流群py_data :483766429

● 公众号:python宝 或 DB宝

● 提供OCP、OCM和高可用最实用的技能培训

● 题目解答若有不当之处,还望各位朋友批评指正,共同进步

80b82c77ff6a8949c21ca415e38ab20a.gif

如果你觉得到文章对您有帮助,点击下方我的头像,赞赏我哦!

有您的支持,小麦粒一定会越来越好!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值