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

时间:2015-03-24 00:53:24

标签: python

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

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

1 个答案:

答案 0 :(得分:1)

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

因此,在test(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要求将所有必需参数捆绑在一起作为调用的第一个参数,以避免混淆。