Discuss / Python / 奇怪,为什么这里的person可以有4个参数

奇怪,为什么这里的person可以有4个参数

Topic source

YY天很晴

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

命名关键字参数必须传入参数名,这和位置参数不同。如果没有传入参数名,调用将报错:

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个参数均视为位置参数,<em>但person()函数仅接受2个位置参数。</em>

但是后面

使用命名关键字参数时,要特别注意,如果没有可变参数,就必须加一个作为特殊分隔符。如果缺少,Python解释器将无法识别位置参数和命名关键字参数:

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

 # 缺少 *,city和job被视为位置参数

pass

这段运行就没问题,不是都是未知参数嘛,求明白的解答下呗~~

YY天很晴

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

在命名关键字参数最后那一段那里

WHU-Jock

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

因为

def person(name, age, city, job): pass 重新定义的这个person函数就是有4个位置参数啊

YY天很晴

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

但是作者说 这个函数仅接受2个位置函数。而且这段代码一开始也定义了四个函数,但是报错了。还是不明白

WHU-Jock

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

这段代码一开始是定义了两个位置参数,两个命名关键字参数,

def person(name, age, *, city, job): print(name, age, city, job) name 和age是位置参数,然后city和job是命名关键字参数, person('Jack', 24, city='Beijing', job='Engineer') 这样子代入实参是对的, person('Jack', 24, 'Beijing', 'Engineer') 这样子代入实参是错的。 也就是说命名关键词参数代入是不能省略,必须指出city='GuiLin,否则Python会有歧义,就会报错。


  • 1

Reply