テストデコレータを作成しようとすると、私は奇妙なインスタンスが見つかりました。このようなコード:pythonのパラメータのデフォルト値はargsかkwargsで受け付けられますか?
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')
返された値は、関数内のパラメータZ追加のデフォルト値を意味するではなく24です。は、内部の装飾機能では受け入れられません。どうして?
'print add(1,1、 'teststring')'は** 12 **を返します!それは正しいです!あなたは** 14 **を受け取りましたか?なぜあなたは24を期待していますか? – EbraHim
@EbraHim私のコンピュータ(Python 2.7、Ubuntu Kylin)で14を返します。あなたはPython 3を使用していますか? –
申し訳ありませんが、私のせいです。それは14を返します。 – EbraHim