码迷,mamicode.com
首页 > 编程语言 > 详细

python函数默认参数陷阱

时间:2019-04-03 21:59:06      阅读:178      评论:0      收藏:0      [点我收藏+]

标签:append   div   href   www.   成员   学习python   app   python函数   方式   

对于学习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

链接:http://www.pythonheidong.com/blog/article/65/

来源:python黑洞网

python函数默认参数陷阱

标签:append   div   href   www.   成员   学习python   app   python函数   方式   

原文地址:https://www.cnblogs.com/fuchen9527/p/10651724.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!