使用位置和关键字参数的顺序

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的绑定机制大致是:

  1. 将位置参数一一分配给函数的顺序参数。这些参数现已设置。
  2. 以任意顺序将关键字参数分配给其余参数。如果其中一个关键字参数与已按位置分配的参数匹配(或者相同的关键字参数被传递了两次),这是一个错误。

在你的例子中,这意味着:

greet('Holmes', first_name='Harry')

首先将 'Holmes' 绑定到 first_name。然后它看到你试图再次将 first_name 作为关键字参数传递并反对。