Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 函数调用期间的关键字参数_Python - Fatal编程技术网

Python 函数调用期间的关键字参数

Python 函数调用期间的关键字参数,python,Python,正如定义所说,在关键字参数后面加上非关键字参数是不合法的。因此,在第一次printName函数调用中显示错误 但据我所知,在第二个函数中,callreverse=False也是关键字参数(定义:使用形式参数的名称将形式值绑定到实际值) 现在reverse=False也是一个关键字参数&它跟在非关键字参数后面,即“first”、“lasting”,为什么它不显示错误 def printName(first, last, reverse): if reverse:

正如定义所说,在关键字参数后面加上非关键字参数是不合法的。因此,在第一次printName函数调用中显示错误

但据我所知,在第二个函数中,call
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)