关于命名关键字参数和廖老师的说明有出入
Topic source这个地方是有问题的:
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')
廖老师希望您看到能更正一下文中的错误
我觉得老师那个错误类型是运行了前面那个
def person(name, age, *, city, job): print(name, age, city, job)
但是可能老师在写教程时,写完想起来要提一下中间可以插个可变参数代替星号,于是这个报错行排到了args的代码块底下……args那个其实会报错缺关键字吧?
- 1
- 2
廖雪峰
运行结果是一样的:TypeError
只是报错信息不一样