【问题标题】:Order of using positional and keyword arguments使用位置和关键字参数的顺序
【发布时间】:2021-02-26 00:25:47
【问题描述】:
显然,如果在调用函数时需要同时使用关键字和位置参数,则必须先使用位置参数。但是下面的代码会报错;
def greet(first_name, l_name):
print(f'Hi, {first_name} {last_name}!')
greet('Holmes',
first_name='Harry')
这是否意味着如果你同时使用两者,你必须首先使用位置参数in所需的顺序,然后才使用关键字参数?
【问题讨论】:
标签:
python-3.x
function
keyword-argument
positional-parameter
【解决方案1】:
位置参数必须按照函数中声明的顺序传递。所以如果你传递三个位置参数,它们必须到函数的前三个参数,而这三个参数不能通过关键字传递。如果您希望能够按关键字乱序传递第一个参数,所有您的参数必须按关键字传递(或者根本不传递,如果它们有默认值)。
如果有帮助的话,Python的绑定机制大致是:
- 将位置参数一一分配给函数的顺序参数。现在已设置这些参数。
- 以任意顺序将关键字参数分配给其余参数。如果其中一个关键字参数与已按位置分配的参数匹配(或相同的关键字参数被传递两次),则为错误。
在你的情况下,这意味着:
greet('Holmes', first_name='Harry')
首先将'Holmes' 绑定到first_name。然后它看到你试图再次将first_name 作为关键字参数传递并反对。