关于Python:Python – 调用函数与键值参数的等价

Python - equivalence of calling function with key-value arguments

我们考虑一下foo(arg1=123, arg2=None)foo(arg1=123)。请告诉我,这两种方法是否相同?


不,两个给定的函数签名(因此函数)是不等价的。

foo(arg1=123, arg2=None)中,有两个参数——arg1arg2,可以在函数内部用作本地名称。请注意,将None的值赋给某个名称并不会使它在赋值语句方面有任何特殊/不同之处。实际上,为非强制变量或可能是空可变对象的变量提供占位符值是一种常见的方法。

另一方面,foo(arg1=123)只有一个参数arg1可用于函数的本地范围。

编辑:

如果您有一个定义为foo(arg1, arg2)的函数,那么这两个参数都是强制(位置)参数。

所以,foo(arg1=21)会抛出一个TypeError,因为你没有提供arg2。然而,foo(arg1=21, arg2=None)将工作得很好,因为您已经为这两个参数提供了值。

编辑2:

如果您有一个定义为foo(arg1=None, arg2=None)的函数(或类似的函数,即使用默认值),那么这两个参数都是可选(关键字)参数。在这种情况下,上述两个定义是相同的。