广告1)如果正确的名称称为,则会由Python自动验证它们somefunct(name=value, ...)
。如果我记得一个函数具有很好的参数描述性名称,并且我将测试它是否被接受,我就不必记住参数的确切标准顺序,也不必每个月在每种用法下查看文档来验证它是否“神经质”通过Python。相反,只能通过文档来验证所用参数的正确顺序。与很长的位置参数列表相比,首选使用命名参数进行调用。因此,所报告的行为是有充分根据的。(短单字母参数“ a,b”当然不能帮助避免错误。)
ad 2)一些用C编写的,数量很少的必需参数的内置快速函数不支持使用命名参数进行调用。(例如hasattr
)
这是因为它们仅使用简单的标头...(... PyObject *args)
,因此所有已命名的参数都会被自动拒绝。(Python绝对不能内省C源代码中的参数名称。
许多其他C函数都有一个标头,...(... PyObject *args, PyObject *kwds)
并且它们通过实现更复杂的验证PyArg_ParseTupleAndKeywords
并将名称写入docs字符串来显式地支持名称的准确列表。
编辑: 在 是可能的,它通过新的函数参数语法 来指示某些函数参数必须在位置上指定,并且不能用作关键字参数。
def somefunc(a, b, /):
print(a, b)