关于python带默认值的参数只能放在后面的问题
python函数带默认值的参数应该放在后面,碰到如下问题:为什么下面这个函数可以这么定义()deffun(*x,y=4,z):print(x)print(y)print(...
python函数带默认值的参数应该放在后面,碰到如下问题:
为什么下面这个函数可以这么定义()
def fun(*x, y=4, z):
print(x)
print(y)
print(z)
而下能这个函数不能这么定义
def fun(x=4, y):
print(x)
print(y) 展开
为什么下面这个函数可以这么定义()
def fun(*x, y=4, z):
print(x)
print(y)
print(z)
而下能这个函数不能这么定义
def fun(x=4, y):
print(x)
print(y) 展开
2个回答
展开全部
第一个那个*x是*args的意思,就是任意个参数,C++里的 va_arg,...符号这种,python函数里可以有*args和**kwargs。
*args之后可以随便放有默认值的和没有默认值的。
因为这之后的任何东西都得用”y=1“”z=1“这种来赋值。
比如说第一个函数,def fun(*x, y=4, z),我写fun(1,2,3,4,5),这五个数全跑到*x里了。我想给y和z赋值必须要写fun(1,2,3,4,5,y=6,z=7)。相当于z跟有默认值的那种也差不多了。所以规定可以把z放在*x后面的任何位置,包括y=4后面,它们的位置关系已经没有用了。
规定def fun(x=4, y) y必须放在x前,就是要保留这种位置关系,要不我写fun(1),你说这个1是给x的还是y的?就有了歧义。所以必须要有正确的位置关系。但是*x后面所有东西都是用参数名赋值的,位置关系不起作用了,所以可以任意顺序了。
要理解规定背后的原因。同理,**kwargs放在最后,也是这个原因。消除歧义性。
*args之后可以随便放有默认值的和没有默认值的。
因为这之后的任何东西都得用”y=1“”z=1“这种来赋值。
比如说第一个函数,def fun(*x, y=4, z),我写fun(1,2,3,4,5),这五个数全跑到*x里了。我想给y和z赋值必须要写fun(1,2,3,4,5,y=6,z=7)。相当于z跟有默认值的那种也差不多了。所以规定可以把z放在*x后面的任何位置,包括y=4后面,它们的位置关系已经没有用了。
规定def fun(x=4, y) y必须放在x前,就是要保留这种位置关系,要不我写fun(1),你说这个1是给x的还是y的?就有了歧义。所以必须要有正确的位置关系。但是*x后面所有东西都是用参数名赋值的,位置关系不起作用了,所以可以任意顺序了。
要理解规定背后的原因。同理,**kwargs放在最后,也是这个原因。消除歧义性。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询