关键字和非关键字参数的顺序

用户名

我有以下代码:

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存在作为4th3rd位置参数的情况。如果将关键字参数视为位置参数,则没有理由指定与该参数关联的单词;如果不指定该单词,则说明该函数具有非恒定接口。

同样,很难说它进入*args还是**kwargs在那个时候。

最重要的是,如果我们将论点含糊不清与pythonduck-typing系统相结合,它将很快导致一些令人难以调试的问题。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章