匿名函数
在定义函数的时候,不想给函数起一个名字,或者一个函数有一个返回值并且只有一句代码时,这个时候就可以用 lambda 来定义一个匿名函数
定义: 变量名 = lambda [参数1,参数2..] :逻辑表达式
- 参数:不需要用括号,通常以逗号分隔的变量表达式形式,也就是位置参数
- 表达式:不能是代码块,不能包含多条语句,只有一条语句譬如 if…else…
- 不需要使用 return 语句返回

参数不需要用括号,表达式可以写括号也可以不写
- 常规参数 ```python result = lambda x, y : x + y # 变量接收结果
print(result) # 返回的是函数的内存地址 print(result(1, 2)) # 将变量作为函数名进行调用
- **默认参数**```pythonresult = lambda a, b, c=100 : a + b + cprint(result(10, 20))
- 可变参数 ```python fn = lambda *args : args print(fn(1, 2, 3)) # 返回元组
fn1 = lambda **kwargs : kwargs print(fn1(name=’tom’, age=12)) # 返回字典
- **带判断的**
```python
fn = lambda a, b : a if a >b else b
print(fn(1, 2))
- 列表数据按字典 key 的值排序 ```python students = [ {‘name’: ‘tom’, ‘age’: 20}, {‘name’: ‘rose’, ‘age’: 22}, {‘name’:’rose’, ‘age’: 23} ]
students.sort(key = lambda x: x[‘name’]) # 利用 lambda 函数进行遍历获取 key 的值,x 指的是字典 print(students)
> sort(key=None, reverse=False),key=None 指可以指定可迭代对象中的一个元素来进行排序
<a name="080c2"></a>
### 递归函数
一个函数在内部调用自己本身
<a name="CJdSL"></a>
#### 特性
- 必须是函数内部自己调用自己
- 必须有一个明确的递归结束条件,即为递归出口
<a name="T26hK"></a>
#### 应用场景
- 快速排序
- 遍历文件夹下面文件
- 阶乘
```python
def sum_nums(num):
if num == 1: # 2. 必须有个出口(退出),即限制条件否则无限递归
return 1
return num + sum_nums(num-1) # 1. 函数内部自己调用自己
result = sum_nums(3)
print(result)

高阶函数
把函数作为参数传递,这样的函数称为高阶函数,高阶函数是函数式编程的体现。函数式编程大量使用函数,减少了代码的重复修改
内置函数
- abs(),数字求绝对值
- round(),数字四舍五入 ```python def sum_num(a, b, f): # 形参占位 return f(a) + f(b) result = sum_num(-1, 2, abs) # 将 函数名 以实参代入 print(result)
result = sum_num(-1, 2, round) # 只需要修改传递函数就可以改变整个函数作用 print(result)
<a name="hMFE1"></a>
#### 数据处理函数
- **filter(),过滤函数**
filter(function, iterable),对容器中的元素进行过滤处理。**function 是个提供过滤条件的函数,返回布尔值。**iterable 是容器类型的数据。
```python
list1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
def func(x):
return x % 2 == 0
result = filter(func, list1) # 将 list1 中的元素遍历逐一传递到 func 中执行过滤
print(result) # 结果存在新的容器中
print(list(result)) # 将容器转换成列表
在调用 filter() 函数时,iterable 会被遍历,它的元素会被逐一传入 function() 函数中。function() 函数若返回 True,则元素被保留;若返回 False,则元素被过滤。最后遍历完成,已保留的元素被放到一个新的容器数据中。
map(),映射函数
map(function, iterable),对容器中的元素进行映射或变换。function 是个提供变换规则的函数,返回变换后元素。iterable 是容器类型的数据。 ```python
求列表中元素的 2 次方
list1 = [1, 2, 3, 4, 5]
def func(x): # 定义计算 2 次方函数 return x ** 2
result = map(func, list1) # 将 list1 中元素遍历逐一传入 func 中执行变换 res = list(result) # 将容器转换成列表 print(res)
> 在调用 map() 函数时,iterable 会被遍历,它的元素会被逐一传入 function() 函数中。在 function() 函数中对元素进行变换。最后遍历完成,变换后的元素被放到一个新的容器数据中。
- **reduce()**
Python3.x 中 reduce() 已经被移到 functools 模块里,需要引入 functools 模块来调用 reduce() 函数 <br /> reduce(function, iterable),对容器中的元素进行累积。**function 必须有两个参数,返回累积的元素。**iterable 是容器类型的数据。
```python
# 计算列表序列中各个数字的累加和
import functools
list1 = [1, 2, 3, 4, 5]
def func(a, b):
return a + b
result = functools.reduce(func, list1)
print(result)
