Python 调用已为其中一个参数赋值的函数

Python 调用已为其中一个参数赋值的函数,python,Python,根据Python文档,将函数定义为def test(a,b=1,c)是非法的:-具有默认值(b=1)的参数的任何后续参数也需要使用默认值定义。正确的方法是def测试(a,b=1,c=2): 有人能解释一下吗 编辑:我认为标题中的多态性令人困惑。标题已更改以反映问题的内容当您为参数定义默认值时,它在Python中隐式变为可选。这意味着您不需要使用显式参数调用它,默认参数存储在函数创建时,并且在不提供参数时使用 因此,在测试(a,b=1,c=2)的情况下,可以传入一个参数(a),或两个参数(a和b)

根据Python文档,将函数定义为
def test(a,b=1,c)是非法的:
-具有默认值
(b=1)
的参数的任何后续参数也需要使用默认值定义。正确的方法是def测试(a,b=1,c=2):
有人能解释一下吗


编辑:我认为标题中的多态性令人困惑。标题已更改以反映问题的内容

当您为参数定义默认值时,它在Python中隐式变为可选。这意味着您不需要使用显式参数调用它,默认参数存储在函数创建时,并且在不提供参数时使用

因此,在
测试(a,b=1,c=2)
的情况下,可以传入一个参数(a),或两个参数(a和b)或三个参数(a,b,c)。Python编译器/解释器将根据传入的参数以及传入的顺序(除非对可选参数使用显式键,否则可以切换顺序),确定哪个参数属于哪个参数

但是现在想想,如果函数被定义为
test(a,b=1,c)
,那么编译器/解释器将如何理解像
test(x,y)
这样的调用的作用呢
x
是显而易见的,它是
a
的一个参数。但是对于
y
,它是
c
的一个参数(这是必需的,但是
y
被作为第二个参数传入,因为我们跳过
b
),还是
b
的一个隐式参数(因为c是没有参数的必需参数,所以没有意义)


正如您所见,这种调用在任何情况下都没有意义,因此Python要求将所有必需的参数捆绑在一起作为调用的第一个参数,以避免混淆。

您的问题是什么?这与“多态性”无关(我强烈支持不同类型的多态性),而是“默认值”或“关键字参数”。这个限制之所以存在,是因为它避免了参数绑定的不确定情况。@Zero Pireus:我的问题不同。它与您的建议无关。@flamenco它与多态性无关。如果您认为有,请提供支持资源。(因为这并没有包含在任何形式的多态性中。)您的问题,如前所述,太广泛了,不适合堆栈溢出。我投票将它作为副本搁置,以帮助你解决问题;您似乎在问为什么位置参数不能跟在关键字参数后面,而链接问题的公认答案回答了这个问题。如果这不是你真正要问的,你需要澄清你的问题(目前的情况是,“不清楚你在问什么”也是暂停提问的有效理由)。