递归函数
应用场景
- 递归是一种编程思想
- 如果要遍历一个文件夹下面所有的文件,通常会使用递归来实现
递归的特点
- 函数内部自己调用自己
- 必须有出口
简单应用
# 3以内数字累加和 3 + 2 + 1
def sum_numbers(num):
# 如果是1,直接返回1 ---- 出口
if num == 1:
return 1
# 如果不是1,当前值 + 继续调用该函数,num值减1
return num + sum_numbers(num - 1)
# 调用函数
print(sum_numbers(100))
输出结果
5050
- 如果没有出口,会报错---超出最大递归深度
- 递归调用的次数超过最大深度也会报错
lambda表达式
- 如果一个函数只有一个返回值,并且只有一句代码,可以使用lambda简化
lambda 参数列表:表达式
- lambda表达式的参数可有可无,函数的参数在lambda表达式中完全适用
- lambda表达式能接收任何数量的参数,但只能返回一个表达式的值
无参数
# 无参数
fn1 = lambda: 100
print(fn1())
输出结果
100
一个参数
# 一个参数
fn1 = lambda a: a
print(fn1('hello world'))
输出结果
hello world
缺省参数
# 缺省参数
fn1 = lambda a, b, c = 100: a + b + c
print(fn1(10,20)) # 使用默认参数
print(fn1(10, 20, 30)) # 不使用默认参数
输出结果
130
60
可变参数:*args
# 可变参数:*args
fn1 = lambda *args:args
print(fn1(10, 20, 30)) # 元组
输出结果
(10, 20, 30)
可变参数:**kwargs
# 可变参数:**kwargs
fn1 = lambda **kwargs:kwargs
print(fn1(name='Tom', age=20))
输出结果
{'name': 'Tom', 'age': 20}
lambda应用
带判断的lambda
# 带判断的lambda
fn1 = lambda a, b: a if a > b else b
print(fn1(10, 20))
输出结果
20
列表数据按字典key的值排序
# 列表数据按字典key对应的value排序
students = [
{'name': 'Tom', 'age': 20},
{'name': 'Rose', 'age': 19},
{'name': 'Jack', 'age': 22}
]
students.sort(key=lambda x:x['age'])
print(students)
students.sort(key=lambda x:x['age'], reverse=True)
print(students)
输出结果
[{'name': 'Rose', 'age': 19}, {'name': 'Tom', 'age': 20}, {'name': 'Jack', 'age': 22}]
[{'name': 'Jack', 'age': 22}, {'name': 'Tom', 'age': 20}, {'name': 'Rose', 'age': 19}]
高阶函数
- 高阶函数就是把一个函数作为另外一个函数的参数传入
内置函数abs()
- 对数字求取绝对值计算
# abs函数
a = abs(-10)
print(a)
输出结果
10
内置函数round()
- 对数字的四舍五入计算
# round函数
a = round(1.2)
b = round(1.8)
print(a)
print(b)
输出结果
1
2
两个函数求取绝对值后再求和计算
直接传入数据
# 先求取绝对值,再求和
def add(a, b):
return abs(a) + abs(b)
print(add(-3, 5))
输出结果
8
传入函数作为参数
# 传入函数
def add_num(a, b, fn):
return fn(a) + fn(b)
print(add_num(-3, 5, abs))
输出结果
8
- 函数作为参数传入,只需传入函数名即可
内置高阶函数
map函数
-
map(func,lst)
将传入的函数变量func作用到lst变量的每个元素中,并将结果组成新的列表(python2)/迭代器(Python3)返回
# map函数
list1 = [1, 2, 3, 4]
def fn(a):
return a ** 2
result = map(fn, list1)
print(list(result))
输出结果
[1, 4, 9, 16]
reduce函数
-reduce(func,lst)
其中func必须要有两个参数。每次func计算的结果继续和序列中的下一个元素做累积计算
- 使用reduce函数,需要导入 functools模块
- 使用functools.reduce来调用函数
# reduce
import functools
list1 = [1, 2, 3, 4, 5]
def fn(a, b):
return a + b
result = functools.reduce(fn,list1)
print(result)
输出结果
15
filter函数
-
filter(func,lst)
函数用于过滤序列 - 过滤掉不符合条件的元素,返回一个filter对象
- 如果要转换成列表,可以使用list()来转换
# filter
list1 = [1, 2, 3, 4, 5, 6]
def func(x):
return x % 2 == 0
result = filter(func, list1)
print(result)
print(list(result))
输出结果
[2, 4, 6]
- 过滤条件为,当func有返回值,并且返回不会False的时候
网友评论