高阶函数
- 递归函数 :
定义了一个函数。然后在函数内。自己调用了自己这个函数。
递归函数内必须要有结束,不然会一直调用下去
一层一层的进入,再一层一层的返回
def digui(num) :
print(num)
if num>0:
digui(num-1)
print(num)
结果:
3
2
1
0
0
1
2
3
- 斐波那锲数列和阶乘 :
def feibo(n):
if n == 1 or n == 2 :
return 1
else :
print(n-1,n-2)
return feibo(n-1) + feibo(n-2)
print(feibo(6))
结果 :
5 4
4 3
3 2
2 1
2 1
3 2
2 1
8
阶乘类似
- 回调函数 :
如果在一个函数中要求传递的参数是一个函数作为参数,并且在函数中使用了传递进来的函数,那么这个函数成为一个回调函数
map()、sorted()、filter()、reduce()都会用到回调函数
def func(x,y,f):
print(f(x,y))
func(2,3,pow) #求2**3
- 闭包函数 :
在一个函数中,返回一个内函数,并且这个反悔的内函数还是用了外部函数中的局部变量,这就是闭包函数
保护了函数中的局部变量不受外部的影响
利用 函数名.__closure__来检测是否是闭包函数
- 匿名函数 lambda表达式 :
匿名函数可以不使用def定义,并且也没有名字
在python中用lambda表达式来定义匿名函数
lambda仅是一行代码,不是一个代价块
lambda也有形参,并且不能访问除自己的形参以外的任何数据
lambda语法 :
lambda[参数列表] :返回值
res = lambda x,y: x + y
print(res(4,4))
res = lambda num: 'yes' if num == 1 else 'no'
print(res(2))
结果 :
8
8
no
-
迭代器 iterator:
访问集合元素的一种方式
可以记住访问遍历的位置的对象,从集合的第一个元素开始访问,直到集合中的所有元素被访问完毕
只能从前往后一个一个的遍历,不能后退
能被next()函数调用,并不断返回下一个值
-
iter():
把可迭代的对象,转为一个迭代器对象
参数:可迭代对象(str、list、tuple、dict、set、range。。。)
返回值 : 迭代器对象
-
next()和list() :
前者一个一个取,后者直接取出所有的数据
> f4 = [1,2,3,4]
res =iter(f4)
r = next(res)
print(r)
r = next(res)
print(r)
r = next(res)
print(r)
r = next(res)
print(r)
r = list(res)
print(r)
f5 = [1,2]
res = iter(f5)
r = list(res)
print(r)
结果:
1
2
3
4
[]
[1, 2]
递归和迭代:
借用一张图来理解,图片来源网络。