返回信息流>>> def add(n, l=[]):
... l.append(n)
... print l
...
>>> add(1)
[1]
>>> add(2)
[1, 2]
>>> add(3)
[1, 2, 3]
>>> add(4)
[1, 2, 3, 4]
l应该是空列表呀,python的参数究竟是怎么回事呀?
这是一条镜像帖。来源:北邮人论坛 / soft-design / #42387同步于 2012/6/13
该镜像源已超过 30 天没有更新,可能在源站已被删除。
SoftDesign机器人发帖
有python大牛吗,小女子求助
nuanyangyang
2012/6/13镜像同步13 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
http://www.cnblogs.com/ukessi/archive/2010/01/25/python-function-default-parameter-value-problem.html
因为l已经被修改了,要是不想被修改,可以再复制个l1=l[:]
【 在 nuanyangyang 的大作中提到: 】
: [code=python]
: >>> def add(n, l=[]):
: ... l.append(n)
: ...................
解决方案:
import copy
def freshdefaults(f):
fdefaults = f.func_defaults
def refresher(*args, **kwargs):
f.func_defaults = deepcopy(fdefaults)
return f(*args, **kwargs)
refresher.__name__ = f.__name__
return refresher
@freshdefaults
def packitem(item, pkg=[]):
pkg.append(item)
return pkg
推荐做法
def packitem(item, pkg=None):
if pkg is None:
pkg = []
pkg.append(item)
return pkg
* 来自《Python Cookbook》 20.1
【 在 caleb 的大作中提到: 】
: 因为l已经被修改了,要是不想被修改,可以再复制个l1=l[:]
你联系方式是什么啊 工作几年了 我们急招软件开发