递归函数、匿名函数和高阶函数
1、什么是递归函数:如果一个函数不调用其他函数,而是调用本身的话就是递归函数。
def a(): print("-----OK!------") a() print(a()) print("-----OK!------") RecursionError: maximum recursion depth exceeded while calling a Python object
这是一个简单的例子,如果递归函数无线循环就会触发“RecursionError”错误,因此我们需要对递归函数添加条件,限制循环次数。
def test(i): # 限定条件 if i == 10: print("10") else: print(i) i += 1 test(i) test(1)
这样就不会报错。
2、什么是匿名函数:用“lambda”创建的小型匿名函数,这种函数得名于省略了def声明函数的标准步骤。
''' 匿名函数的格式 lambda 参数列表:运算表达式 ''' r = lambda a: a + 1 # print(r) result = r(5) print(result)
3、什么是高阶函数:既然变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,同样我们还可以把一个函数当做另一个函数的返回值。这种函数的使用方式我们称为高阶函数。
# 下面这个可以说是高阶函数 def func1(a, f): print("++++++++>", a) r = f(a) print("=========>", r) # 匿名函数多作为其他函数的参数使用 func1(8, lambda x: x ** 2)
* 系统函数的高阶函数实例
from functools import reduce m = max(5, 9) print(m) m = max([2, 5, 62, 8, 10, 33]) print(m) list1 = [('tom', 19), ('tony', 20), ('lily', 18), ('daniel', 21), ('rose', 22)] # 这是默认排序的方法,结果是:('tony', 20) m = max(list1) print(m) # 使用了高阶函数的表示法,结果是('rose', 22) m = max(list1, key=lambda x: x[1]) print(m) # 然后是最小值,结果是:('lily', 18) m1 = min(list1, key=lambda x: x[1]) print(m1) # 排序,结果是[('lily', 18), ('tom', 19), ('tony', 20), ('daniel', 21), ('rose', 22)] s = sorted(list1, key=lambda x: x[1]) print(s) # 排倒序,结果是[('rose', 22), ('daniel', 21), ('tony', 20), ('tom', 19), ('lily', 18)] s = sorted(list1, key=lambda x: x[1], reverse=True) print(s) # 筛选 rr = filter(lambda x: x[1] > 20, list1) # 打印出迭代器地址<filter object at 0x0000025F721B99A0> print(rr) # 转化为列表后再打印:[('daniel', 21), ('rose', 22)] print(list(rr)) # 提取数据并加工 # 把所有人的年龄加1 ma = map(lambda x: x[1] + 1, list1) # 打印出迭代器地址<map object at 0x0000022454D865B0> print(ma) # 强转为列表,打印结果为:[20, 21, 19, 22, 23] print(list(ma)) # 把所有人名字首字母大写['Tom', 'Tony', 'Lily', 'Daniel', 'Rose'] ma = map(lambda x: x[0].title(), list1) print(list(ma)) # 累加求和:55 rr = reduce(lambda x, y: x + y, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) print(rr) # 累加求乘:3628800 rr = reduce(lambda x, y: x * y, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) print(rr)