Python 函数调用期间的关键字参数
正如定义所说,在关键字参数后面加上非关键字参数是不合法的。因此,在第一次printName函数调用中显示错误 但据我所知,在第二个函数中,callPython 函数调用期间的关键字参数,python,Python,正如定义所说,在关键字参数后面加上非关键字参数是不合法的。因此,在第一次printName函数调用中显示错误 但据我所知,在第二个函数中,callreverse=False也是关键字参数(定义:使用形式参数的名称将形式值绑定到实际值) 现在reverse=False也是一个关键字参数&它跟在非关键字参数后面,即“first”、“lasting”,为什么它不显示错误 def printName(first, last, reverse): if reverse:
reverse=False
也是关键字参数(定义:使用形式参数的名称将形式值绑定到实际值)
现在reverse=False
也是一个关键字参数&它跟在非关键字参数后面,即“first”、“lasting”,为什么它不显示错误
def printName(first, last, reverse):
if reverse:
print last, first
else:
print first, last
printName('FIRSTY', last='LASTLY', False) -----> this shows an error
printName('FIRSTY', 'LASTLY', reverse= False) -----> this doesn't why so
实际的规则是,一旦使用了关键字参数,就不能后跟非关键字参数 在Python语言参考中定义为
参数列表::=位置参数[“,”关键字参数]
[“,”“*”表达式][“,”关键字\u参数]
[“,”“**”表达式]
|关键字参数[“,”“*”表达式]
[“,”“**”表达式]
|“*”表达式[”,“关键字参数][”,“***”表达式]
|“**”表达式
在所有这些表单中,如果存在关键字参数,则它们后面不会跟位置参数或非关键字参数。Python首先尝试填充所有有序参数,然后检查关键字参数。根据调用约定,有序参数不允许跟在关键字参数后面。这是不允许的,因为订单不明确。然而,这种呼叫约定还有其他更微妙的影响。例如,可能会对变量名进行双重赋值,这会导致以下可能的错误:
def printName(first, last, reverse):
if reverse:
print last, first
else:
print first, last
printName('FIRSTY', 'LASTLY', last=False)
这就产生了错误:
TypeError: printName() got multiple values for keyword argument 'last'
首先,一些概念:
keyword argument <-> function(last = False)
non-keyword argument <-> function(False)
printName('FIRSTY', 'LASTLY', reverse= False)