python-函数参数默认值的一些问题

Python012

python-函数参数默认值的一些问题,第1张

1.在定义有默认参数函数时,需要注意以下: 必传参数必须在前面,默认参数在后;

备注:python为了简化函数的调用,提供了默认参数机制,这样在调用函数时,就可以省略最后一个参数不写;设置何种参数为默认参数?一般来说,将参数值变化小的设置为默认参数。

2. 若参数为列表,且有默认值

2.1若调用方法时传该参数,则没有问题

2.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放在最后,也是这个原因。消除歧义性。

这个很简单,在input后面加 “or 默认值”就行了,原理是这样的:如果未输入任何内容,则input将返回空字符串. python中的空字符串是False bool(“”) – >假。

按你的例子:

a=input("2+2=?") or "4"

print a