Python函数调用异常解析:为何func(y, y=x)可正常执行返回None?
Python函数调用逻辑解析:案例1为何能正常执行?
先看定义的函数:
def func(x, y): if x <= y: return x, y
这个函数在以下四个调用场景中,只有案例1能正常执行并返回None,其余均会报错。下面逐个分析原因:
案例1
调用代码:
func(y, y=x)
执行结果:
None
解析:
这里要区分外部变量名和函数的参数名:
- 位置参数
y是把当前作用域中变量y的值,传给函数的第一个参数x; - 关键字参数
y=x是把当前作用域中变量x的值,传给函数的第二个参数y。
完全符合Python的参数传递规则:位置参数在前,关键字参数在后,且没有重复给同一个函数参数赋值。函数能正常接收两个参数,进入逻辑判断:如果传入的第一个值(原外部y)大于第二个值(原外部x),则不会执行return语句,Python中函数默认返回None,所以得到这个结果。
案例2
调用代码:
func(x=y,x)
报错信息:
Cell In[18], line 1 func(x=y,x) SyntaxError: positional argument follows keyword argument
解析:
Python语法明确规定:关键字参数不能出现在位置参数的前面。这里x=y是关键字参数,后面紧跟位置参数x,直接违反语法规则,触发语法错误。
案例3
调用代码:
func(x,x=y)
报错信息:
TypeError Traceback (most recent call last) Cell In[17], line 1 ----> 1 func(x,x=y) TypeError: func() got multiple values for argument 'x'
解析:
位置参数x会被自动匹配到函数的第一个参数x,而后面的关键字参数x=y又试图给函数的x参数赋值,导致同一个函数参数被重复赋值,触发类型错误。
案例4
调用代码:
func(y=1,y=x)
报错信息:
Cell In[19], line 1 func(y=1,y=x) SyntaxError: keyword argument repeated: y
解析:
这里重复使用关键字参数y,试图给函数的y参数赋值两次,Python不允许重复定义同一个关键字参数,直接触发语法错误。
内容的提问来源于stack exchange,提问作者Purlp9
相关产品推荐
相关产品推荐

