我有以下代码:
def say_hello_then_call_f(f, *args, **kwargs):
print 'args is', args
print 'kwargs is', kwargs
print("Hello! Now I'm going to call %s" % f)
return f(*args, **kwargs) # when calling a function, however, * unpacks a tuple and ** unpacks a dict
def g(x, y,s, z=1):
return (x + y) / z
我不明白为什么以下行会导致错误“在关键字arg之后出现非关键字arg”。即使传递值时,函数是否必须具有关键字参数,然后才具有非关键字参数?:
say_hello_then_call_f(g, 1, y=2,4, z=5.)
谢谢
icktoofay是正确的,但我认为对此进行更深入的介绍可能会有用。这样做的原因是,如果允许使用关键字参数,然后再使用位置参数,则对于该参数实际应位于哪个位置固有地变得模棱两可。是否应该计算关键字参数?
在您的示例中:
say_hello_then_call_f(g, 1, y=2, 4, z=5.)
必须同时4
存在作为4th
和3rd
位置参数的情况。如果将关键字参数视为位置参数,则没有理由指定与该参数关联的单词;如果不指定该单词,则说明该函数具有非恒定接口。
同样,很难说它进入*args
还是**kwargs
在那个时候。
最重要的是,如果我们将论点含糊不清与python
duck-typing系统相结合,它将很快导致一些令人难以调试的问题。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句