Discuss / Python / 关于命名关键字参数和廖老师的说明有出入

关于命名关键字参数和廖老师的说明有出入

Topic source

廖雪峰

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

运行结果是一样的:TypeError

只是报错信息不一样

儒生脱尘

#13 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' 而不是廖老师文中说的报错错误: TypeError: person() takes 2 positional arguments but 4 were given 虽然错误类型相同,但是错误原因不同,按照廖老师的说法,假如是因为位置参数引起的错误,那么:

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

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

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

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

寒上词

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

我觉得老师那个错误类型是运行了前面那个

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

但是可能老师在写教程时,写完想起来要提一下中间可以插个可变参数代替星号,于是这个报错行排到了args的代码块底下……args那个其实会报错缺关键字吧?


  • 1
  • 2

Reply