【发布时间】:2016-08-22 15:12:00
【问题描述】:
我在尝试制作测试装饰器时发现了一个奇怪的例子。代码如下:
def doublefunc(fn):
def warpped(*arg, **kwargs):
arg = (i if type(i) is not int else i*2 for i in arg)
for k, v in kwargs.iteritems():
kwargs[k] = v *2 if type(v) is int else v
return fn(*arg, **kwargs)
return warpped
@doublefunc
def add(x, y, m, z=10, v='bbaa'):
print 'x=%s, y=%s, m=%s, z=%s, v=%s' % (x, y, m, z, v)
return x + y + z
当我这样调用函数时:
print add(1, 1, 'teststring')
返回值是14而不是24。这意味着add函数中参数z的默认值在decorator中不被接受功能内。为什么?
【问题讨论】:
-
print add(1, 1, 'teststring')返回 12!这是正确的!您确定收到 14 吗?你为什么要 24 岁? -
@EbraHim 它在我的计算机上返回 14(Python 2.7,Ubuntu Kylin)。你在使用 Python 3 吗?
-
对不起,我的错。它返回 14。
标签: python parameters default-value