我想知道'a = a'和'b = b'是否会导致问题/意外行为?代码在示例中工作正常.
def add_func(a=2,b=3):
return a+b
a=4
b=5
answer = add_func(a=a, b=b)
Run Code Online (Sandbox Code Playgroud)
谢谢
不是我所知道的,虽然我很想被证明是错的.
形式语言参考定义了函数调用的词法结构.重要的是它将"keyword_item"定义为identifier "=" expression.此外,这里是关于如何解释调用参数的说法:
如果存在关键字参数,则首先将它们转换为位置参数,如下所示.首先,为形式参数创建未填充的槽列表.如果有N个位置参数,则将它们放在前N个槽中.接下来,对于每个关键字参数,标识符用于确定相应的槽(如果标识符与第一个形式参数名称相同,则使用第一个槽,依此类推).如果插槽已填充,则引发TypeError异常.否则,参数的值放在槽中,填充它(即使表达式为None,它填充槽).处理完所有参数后,仍然未填充的插槽将使用函数定义中的相应默认值填充.
这列出了一些可能的场景.
在简单的情况下,就像你提到的那样,有两个正式的参数(a和b),如果你使用关键字参数指定函数调用add_func(a=a, b=b),这里发生了什么:
a=)与函数的所有形式参数名称(定义函数时给定参数的名称)进行比较,在我们的例子中,a和b).4!)用于填充相应的槽.因此,Python完全不同地处理关键字参数中的"标识符".但这仅适用于关键字参数; 很明显,如果你想是这样add_func(b, a),即使你的参数本身被称为b及a,这将不会被映射到函数形式参数; 你的参数会倒退.但是,add_func(b=b, a=a)工作正常; 只要它们是关键字参数,这些位置无关紧要.