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'而不是像廖老师说的被当做四个位置参数传入,希望廖老师能看一下

def person2(name, age, *args, city, job): print(name, age, args, city, job) person2('Jack', 24, 123, 123, 123, city='Beijing', job='Engineer')

Jack 24 (123, 123, 123) Beijing Engineer

简单来说就是你的 'Beijing', 'Engineer' 被 *args 拦截了,所以 city, job 并不能收到,得用关键字传进去

def person(name, age, *, city, job): print(name, age, city, job) person('Jack', 24, city='Beijing', job='Engineer')

def person2(name, age, *args, city, job): print(name, age, args, city, job) person2('Jack', 24, city='Beijing', job='Engineer')

Jack 24 Beijing Engineer Jack 24 () Beijing Engineer

槲寄君

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

我知道啊,但廖老师说的是被当成位置参数传进去而不是传入可选参数*args

他说是被识别为位置参数,但没说可以传给*args后面的两个 “关键字” 参数啊

槲寄君

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

我知道啊,但廖老师运行的结果是被当成位置参数了啊,而我这边是直接当成可选参数传入,我又没说会传给关键字参数,,你不明白我说的重点啊,我想说是python版本不一样造成的问题还是其他什么原因,我们讨论的都不在一个点上

月色海岸

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

你理解有误,再仔细看一下,老师说的是“把这4个参数均视为位置参数,但person()函数仅接受2个位置参数”,解释了前面一段的“命名关键字参数必须传入参数名,这和位置参数不同。如果没有传入参数名,调用将报错:”,他并没有“结果是被当成位置参数”

槲寄君

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

楼上,是你没认真看吧,老师后面都有说了他的解释器运行报错的提示是“TypeError: person() takes 2 positional arguments but 4 were given”而且老师结论讲的是:“由于调用时缺少参数名city和job,Python解释器把这4个参数均视为位置参数,但person()函数仅接受2个位置参数。”,就是说明结果是解释器当成了四个位置参数

但我的解释器报错提示是:“TypeError: person() missing 2 required keyword-only arguments: 'city' and 'job'”结果是解释器当成两个位置参数和可选参数,两个提示不一样啊,如果这是python版本问题那逻辑就不一样了啊,所以我才想问这是什么原因啊,你再好好看看吧

黄展奇

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

@月色海岸 他说的是运行结果不一样,我也很想知道


  • 1
  • 2

Reply