Discuss / Python / 这个地方是有问题的

这个地方是有问题的

Topic source

儒生脱尘

#1 Created at ... [Delete] [Delete and Lock User]

这个地方是有问题的:

def person(name, age, *args, city, job): print(name, age, args, city, job)

person('Jack', 24, 'Beijing', 'Engineer')

由于缺少命名关键字参数,所以会报错: TypeError: person() missing 2 required keyword-only arguments: 'city' and 'job' 而不是廖老师文中说的报错错误:

person('Jack', 24, 'Beijing', 'Engineer') Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: person() takes 2 positional arguments but 4 were given 由于调用时缺少参数名city和job,Python解释器把这4个参数均视为位置参数,但person()函数仅接受2个位置参数。

虽然错误类型相同,但是错误原因不同,命名关键字参数是因为没有传入命名关键字参数报错。按照廖老师的说法,假如是因为位置参数多给引起的错误,那么:

def person(name, age, *args): print(name, age, args)

person('Jack', 24, 'Beijing', 'Engineer')

应该也会报多给了位置参数的错误。但其实并不会报错。因为位置参数name, age分别赋值后,剩余的其他参数会被args组装成一个tuple。就像ES6的剩余参数一样: 所以输出结果是 Jack 24 ('Beijing','Engineer')

廖老师希望您看到能更正一下文中的错误


  • 1

Reply