国产成人AV无码一二三区,少女1到100集,国产精品久久久久精品综合紧,巜公妇之诱感肉欲HD在线播放

文章 > Python基础教程 > python新手常见问题一:乱用表达式

python新手常见问题一:乱用表达式

头像

爱喝马黛茶的安东尼

2019-06-28 09:16:572838浏览 · 0收藏 · 0评论

在函数参数中乱用表达式作为默认值

Python允许给一个函数的某个参数设置默认值以使该参数成为一个可选参数。尽管这是这门语言很棒的一个功能,但是这当这个默认值是可变对象(mutable)时,那就有些麻烦了。例如,看下面这个Python函数定义:

>>> def foo(bar=[]):        
# bar是可选参数,如果没有指明的话,默认值是[]
...    bar.append("baz")    
# 但是这行可是有问题的,走着瞧…
...    return bar

人们常犯的一个错误是认为每次调用这个函数时不给这个可选参数赋值的话,它总是会被赋予这个默认表达式的值。例如,在上面的代码中,程序员可能会认为重复调用函数foo() (不传参数bar给这个函数),这个函数会总是返回‘baz’,因为我们假定认为每次调用foo()的时候(不传bar),参数bar会被置为[](即,一个空的列表)。

相关推荐:《Python视频教程

那么我们来看看这么做的时候究竟会发生什么:

>>> foo()
["baz"]
>>> foo()
["baz", "baz"]
>>> foo()
["baz", "baz", "baz"]

嗯?为什么每次调用foo()的时候,这个函数总是在一个已经存在的列表后面添加我们的默认值“baz”,而不是每次都创建一个新的列表?

答案是一个函数参数的默认值,仅仅在该函数定义的时候,被赋值一次。如此,只有当函数foo()第一次被定义的时候,才讲参数bar的默认值初始化到它的默认值(即一个空的列表)。当调用foo()的时候(不给参数bar),会继续使用bar最早初始化时的那个列表。

由此,可以有如下的解决办法:

>>> def foo(bar=None):
...    if bar is None:      
# 或者用 if not bar:
...        bar = []
...    bar.append("baz")
...    return bar
...
>>> foo()
["baz"]
>>> foo()
["baz"]
>>> foo()
["baz"]
关注

关注公众号,随时随地在线学习

本教程部分素材来源于网络,版权问题联系站长!

《性呻吟》伦理| EXO妈妈MV高清免费观看| 丫头把腿开大让我添添| 《请好好疼爱里面》免费观看| 《俄罗斯空姐2(俄罗斯航空)》| 女生把球球给男生抓的视频| 《人妻被下春药在线》| 儿媳婉柔和父亲王大川的背景故事| 5人轮换免费观看电视剧最新 | 芬太尼问题百度百科| 向日葵在线观看免费高清电视剧| 女仆| 高三妈妈用性缓解孩子压力| 我把刘姨俩腿扛在肩上是哪一集的| 9.1芒果浏览器| 少女初恋吃小头头视频免费| 电影《乳妓》在线观看| 人犬兽人在线观看免费完整一| 电影《乳妓》在线观看| 欧美精产国品一二三区别| 欧美| 灵媒| 不许穿内裤随时挨C调教H| 小玲与公做爱小小说| MV在线观看免费播放历史| 白色变态蕾丝超薄开档连身袜| 五十款夜间禁用APP粉色视频 | 公憩止痒小说原著叫什么名字 | 禁忌5大结局| 98在线高清免费观看电视剧狂 | 人野兽马狗猪大全| 《黏糊糊的你》免费观看 | 完美搭档| 下面太紧了和太粗太硬的做会痛| 昊梦梦主人请好好疼爱里面动画第二季 | 潮湿的体温2| 妻子的秘密在线观看免费全集| 97人妻人人躁人人玩人人澡AV| 少女国产免费观看高清电视剧 | 双男主GAI免费观看网站| 在婚房被伴郎C了2个小时的后果