使用位置和关键字参数的顺序
Order of using positional and keyword arguments
显然,如果在调用函数时需要同时使用关键字参数和位置参数,则必须首先使用位置参数。但是下面的代码会导致错误;
def greet(first_name, l_name):
print(f'Hi, {first_name} {last_name}!')
greet('Holmes',
first_name='Harry')
那么这是否意味着如果您同时使用两者,则必须先按 要求的顺序使用位置参数,然后才使用关键字参数?
必须按照函数中声明的顺序传递位置参数。所以如果你传递三个位置参数,它们必须转到函数的前三个参数,而这三个参数不能通过关键字传递。如果您希望能够通过关键字乱序传递第一个参数,all 您的参数必须通过关键字传递(或者根本不传递,如果它们有默认值)。
如果有帮助,Python的绑定机制大致是:
- 将位置参数一一分配给函数的顺序参数。这些参数现已设置。
- 以任意顺序将关键字参数分配给其余参数。如果其中一个关键字参数与已按位置分配的参数匹配(或者相同的关键字参数被传递了两次),这是一个错误。
在你的例子中,这意味着:
greet('Holmes', first_name='Harry')
首先将 'Holmes'
绑定到 first_name
。然后它看到你试图再次将 first_name
作为关键字参数传递并反对。
显然,如果在调用函数时需要同时使用关键字参数和位置参数,则必须首先使用位置参数。但是下面的代码会导致错误;
def greet(first_name, l_name):
print(f'Hi, {first_name} {last_name}!')
greet('Holmes',
first_name='Harry')
那么这是否意味着如果您同时使用两者,则必须先按 要求的顺序使用位置参数,然后才使用关键字参数?
必须按照函数中声明的顺序传递位置参数。所以如果你传递三个位置参数,它们必须转到函数的前三个参数,而这三个参数不能通过关键字传递。如果您希望能够通过关键字乱序传递第一个参数,all 您的参数必须通过关键字传递(或者根本不传递,如果它们有默认值)。
如果有帮助,Python的绑定机制大致是:
- 将位置参数一一分配给函数的顺序参数。这些参数现已设置。
- 以任意顺序将关键字参数分配给其余参数。如果其中一个关键字参数与已按位置分配的参数匹配(或者相同的关键字参数被传递了两次),这是一个错误。
在你的例子中,这意味着:
greet('Holmes', first_name='Harry')
首先将 'Holmes'
绑定到 first_name
。然后它看到你试图再次将 first_name
作为关键字参数传递并反对。