新知榜官方账号
2023-10-27 22:11:15
绝大多数情况下,Python是一个干净具有一致性的语言。然而,有些少数情况会让初学者感到困惑。其中有些情况是有意识的但会成为潜在的莫名其妙,而有些可以说是语言赘肉。下面我们看看使用可变默认参数(Mutabledefaultarguments)时会出现什么莫名其妙的状况。
你可能写了以下函数,它有一个默认参数是一个list:
defappend_to(element,to=[]):
to.append(element)
returnto
然后调用该函数:
my_list=append_to(12)
print(my_list)
my_other_list=append_to(42)
print(my_other_list)
Anewlistiscreatedeachtimethefunctioniscalledifasecondargumentisn’tprovided,sothattheoutputis:
每次调用该函数,如果第二个参数没有提供(使用默认参数),一个新的list将会生成,所以输出应该是:
[12]
[42]
但是,结果并非上面那样,而是下面这样:
[12]
[12,42]
当该函数被定义时,一次性生成一个list作为默认参数,后面每次成功调用都是使用的第一次生成的那个list。Python的默认参数只在函数被定义时生成一次,而非每次调用时生成。这就意味着如果你使用可变默认参数并改变它,所有调用该函数的结果都是这个可变对象。
正确的做法应该是:让默认参数为None(None通常是一个很好的选择),每次调用时创建一个新对象。
defappend_to(element,to=None):
iftoisNone:
to=[]
to.append(element)
returnto
同时也有注意,该函数要传递一个list对象作为第二个参数,因为函数中对它进行了append操作。
如果你依然在编程的世界里迷茫,不知道自己的未来规划,对python感兴趣,这里推荐一下我的学习交流圈:556370268,里面都是学习python的,从最基础的python【python,游戏,黑客技术,网络安全,数据挖掘,爬虫】到网络安全的项目实战的学习资料都有整理,送给每一位python小伙伴,希望能帮助你更了解python,学习python
相关工具
相关文章
推荐
用Deepseek写AI绘图提示词,像呼吸一样简单!
2025-02-19 16:12
你以为AI绘画是黑科技?其实早成了“路边摊生意”!
2025-02-19 10:15
Flux爆火,全网最全面最详细的Flux使用教程!
2025-02-18 14:19
用AI如何创作音乐,实战教学来啦!
2025-02-17 17:23
MidJourney让你秒变绘画大神,从零开始画哪吒!
2025-02-17 14:56
AI应用新境界:让人工智能成为你的得力助手
2025-02-14 15:45
AI短片革命:当创作遇上智能,人人都能成为导演
2025-02-14 14:53
AI狂潮下的人类职场:是失业危机还是进化契机?
2025-02-13 16:53
开启影视创作新纪元,效率提升 10 倍的神器来了!
2025-02-13 15:11
深度解析DeepSeek:当AI技术照进创作产业的未来
2025-02-12 17:16