1. 递归
1. 应用
- 特点
- 函数内部自己调用自己
- 必须有出口
def fn_sum(iNum): if iNum == 1: return iNum return iNum + fn_sum(iNum - 1) print(fn_sum(3)) # 输出结果 6
2. lambda表达式
1. 语法
- 如果一个函数有一个返回值,并且只有一句代码,可以使用lambda简化。
# lambda表达式的参数可有可无,函数的参数正在lambda表达式中完全适用。 # lambda表达式能接收任何数量的参数,但只能返回一个表达式的值。 lambda 参数列表 : 表达式
- 示例
# 无参数 rst = lambda: 100 print(rst) # 返回lambda内存地址 print(rst()) # 输出结果 <function <lambda> at 0x7f68b8490ee0> 100 # 有参数 rst = lambda ia, ib: ia + ib print(rst(1, 2)) # 输出结果 3
2. lambda的参数形式
- 无参数
rst = lambda: 100 print(rst()) # 输出结果 100
- 一个参数
rst = lambda ia: ia print(rst(10)) # 输出结果 10
- 默认参数
rst = lambda ia, ib, ic = 30: ia + ib + ic print(rst(10, 20)) print(rst(10, 20, 40)) # 输出结果 60 70
- 可变参数
rst = lambda *args: args print(rst(10, 20, 40)) # 输出结果 (10, 20, 40)
- 可变参数
rst = lambda **kwargs: kwargs print(rst(name="ccblogs", age=18)) # 输出结果 {'name': 'ccblogs', 'age': 18}
3. lambda的应用
- 带判断的lambda
rst = lambda a, b: a if a > b else b print(rst(30, 29)) # 输出结果 30
- 列表数据按字典key的值排序
lstNb = [{"name":"ccblogs1", "age":18}, {"name":"ccblogs2", "age":16}, {"name":"ccblogs3", "age":19}] lstNb.sort(key=lambda nb: nb["age"]) print(lstNb) # 输出结果 [{'name': 'ccblogs2', 'age': 16}, {'name': 'ccblogs1', 'age': 18}, {'name': 'ccblogs3', 'age': 19}]
3. 高阶函数
1. 定义
- 把函数作为参数传入,这样的函数称为高阶函数。
2. 高阶函数
- 示例
# abs():求数字的绝对值 # round():对数字进行四舍五入 def fn_add(iA, iB, fn): return fn(iA) + fn(iB) print(fn_add(1, -2, abs)) # 输出结果 3
3. 内置高阶函数
- map():map(func, lst),将传入的函数变量func作用到lst变量的每个元素中,并将结果组成新的列表(python2)/迭代器(python3)返回。
lstNum = [1, 2, 3, 4, 5] def fn_func(iA): return iA ** 2 print(map(fn_func, lstNum)) print(list(map(fn_func, lstNum))) # 输出结果 <map object at 0x7ff9242ecfd0> [1, 4, 9, 16, 25]
- reduce():reduce(func, lst), 其中func必须有两个参数。每次func计算的结果继续和序列的下一个元素做累积计算。
import functools lstNum = [1, 2, 3, 4, 5] def fn_add(iA, iB): return iA + iB print(functools.reduce(fn_add, lstNum)) # 输出结果 15
- filter():filter(func, lst)函数用于过滤序列,过滤掉不符合条件的元素,返回一个filter对象。如果要转换为列表,可以使用list()来转换。
lstNum = [1, 2, 3, 4, 5] def fn_func(iA): return iA % 2 == 0 print(filter(fn_func, lstNum)) print(list(filter(fn_func, lstNum))) # 输出结果 <filter object at 0x7f0a5cd4ffd0> [2, 4]