Python可变默认参数的陷阱

新知榜官方账号

2023-10-27 22:11:15

Python可变默认参数的陷阱

绝大多数情况下,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

本页网址:https://www.xinzhibang.net/article_detail-18160.html

寻求报道,请 点击这里 微信扫码咨询

关键词

Python 可变默认参数 陷阱

分享至微信: 微信扫码阅读

相关工具

相关文章