python默认参数陷阱
程序员文章站
2022-04-19 23:17:05
对于学习python的人都有这样的困惑 def foo(a=[]): a.append(5) return a Python新手希望这个函数总是返回一个只包含一个元素的列表:[5]。结果却非常不同,而且非常惊人(对于新手来说): >>> foo() [5] >>> foo() [5, 5] >>> ......
对于学习python的人都有这样的困惑
def foo(a=[]): a.append(5) return a
python新手希望这个函数总是返回一个只包含一个元素的列表:[5]。结果却非常不同,而且非常惊人(对于新手来说):
>>> foo() [5] >>> foo() [5, 5] >>> foo() [5, 5, 5] >>> foo() [5, 5, 5, 5] >>> foo()
实际上,这不是设计缺陷,并不是因为内部或性能。
它只是因为python中的函数是第一类对象,而不仅仅是一段代码。
一旦你以这种方式思考,那么它就完全有意义了:一个函数是一个被定义的对象; 默认参数是一种“成员数据”,因此它们的状态可能会从一个调用更改为另一个调用 - 与任何其他对象完全相同。
所属网站分类: python基础 > 函数
作者:goodbody
链接:
来源:python黑洞网,专注python资源,python教程,python技术!