参数的组合
五种参数类型可以组合使用,但是有一定的顺序,顺序是:位置参数、默认值参数、可变参数、命名关键字参数、关键字参数
>>> def f1(a,b,c=0,*args,**kw):
... print("a=",a,"b=",b,"c=",c,"args=",args,"kw=",kw)
...
>>> def f2(a,b,c=0,*,d,**kw):
... print("a=",a,"b=",b,"c=",c,"d=",d,"kw=",kw)
...
>>> args = (1,2,3,4)
>>> kw = {"d":99,"X":"#"}
>>> f1(*args,**kw) a= 1 b= 2 c= 3 args= (4,) kw= {'d': 99, 'X': '#'}
>>> arg = (1,2,3)
>>> kw = {"d":99,"X":"#"}
>>> f2(*arg,**kw) a= 1 b= 2 c= 3 d= 99 kw= {'X': '#'}
>>> kw = {"f":88,"x":"&"}
>>> f2(*arg,**kw) Traceback (most recent call last): File "" , line 1, in <module> TypeError: f2() missing 1 required keyword-only argument: 'd'
函数的递归
在函数的内部,去调用自己
条件:
1、函数自己要调用自己
2、递归一定要有结束条件
使用递归函数需要注意防止递归深度溢出,在Python中,通常情况下,这个深度是1000层,超过将抛出异常。 在计算机中,函数递归调用是通过栈(stack)这种数据结构实现的,每当进入一个递归时,栈就会加一层,每当函数返回一次,栈就会减一层。 由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出。
#求n!
def fact(n):
if n == 1:
return 1
return n*fact(n-1)
print(fact(5))
# 5 * fact(5-1)
# 5 * 4 * fact(4-1)
# 5 * 4 * 3 * fact(3-1)
# .....
# 5 * 4 * 3 * 2 * 1
匿名函数
匿名:没有名字的函数
function 函数名称(参数){
//代码块
return 返回值
}function (参数){
//代码块 }
python中
def 函数名(参数):
#代码块
return 返回值
ambda 参数 : 代码 如果有返回值就写,没有就不写
def sum(a,b,c):
return a + b + c
sum_lambda = lambda a,b,c: a + b + c
print(sum(1,100,1000))
print(sum_lambda(1,100,1000))