一、递归
递归特点:
- 函数内部自己调用自己
- 必须有出口
def return_num(num):
if num == 1:
return 1
return num + return_num(num -1)
result = return_num(3)
print(result)
注意:函数返回是返回到该函数调用的地方。
二、lambda表达式(匿名函数)
1. lambda应用场景
如果一个函数有一个返回值,并且只有一句代码,可以使用lambda简化
2. lambda语法
lambda 参数列表 : 表达式
fn = lambda: 100
print(fn) # 打印的是地址
print(fn()) # 100
注意:
- lambda表达式的参数可有可无,函数的参数在lambda表达式中完全适用。
- lambda表达式能接收任何数量的参数,但只能返回一个表达式的值。
- 直接打印lambda表达式,输出的是此lambda的内存地址。
- 计算两个数之和
fn = lambda a, b: a + b
print(fn(2, 9))
3. lambda的参数形式
- 无参数
fn = lambda: 100
print(fn())
- 一个参数
fn = lambda a: a
print(fn("张飞"))
- 默认参数(缺省参数)
fn = lambda a, b, c=50: a + b + c
print(fn(10, 25)) # 85
print(fn(100, 200, 300)) # 600
- 不定长位置参数: *args
fn = lambda *args: args
print(fn()) # ()
print(fn(10, 20, 60)) # (10,20,60)
注意:这里的可变参数传入到lambda之后,返回值为元组。
- 不定长关键字参数:**kwards
fn = lambda **kwargs: kwargs
print(fn(name="Python", age=18)) # {'name': 'Python', 'age': 18}
4. lambda的应用
- 带判断的lambda
fn = lambda a, b: a if a > b else b
print(fn(100, 500))
- 列表数据按照字典的key的值排序
student = [{"name": "张飞", "age": 28},
{"name": "刘备", "age": 25},
{"name": "关羽", "age": 36}]
student.sort(key=lambda x: x["name"], reverse=True)
print(student)
student.sort(key=lambda x: x["age"], reverse=True)
print(student)
三、高阶函数
把函数作为参数传入,这样的函数称为高阶函数,高阶函数是函数式编程的体现。函数式编程就是指的这种高度抽象的编程范式。
# f 是第三个参数,用来接收传进来的函数
def add_num(a, b, f):
return f(a) + f(b)
print(add_num(-1.1, 1.9, abs)) # 3
print(add_num(2.4, 1.9, round)) # 4
1. 内置高阶函数
- map()
map(func,lst),将传入的函数变量func作用到lst变量的每个元素中,并将结果组成新的列表返回。
# 计算list1序列中各个数字的2次方
list1 = [1, 3, 5, 7, 9]
def fun(x):
return x ** 2
result = map(fun, list1) # 返回一个迭代器
print(list(result))
- reduce()
reduce(func,lst),其中func必须有两个参数。每次func计算的结果继续和序列的下一个元素做累计计算。
注意:reduce()传入的参数func必须接收2个参数。
# 求序列中元素累计之和
import functools
list1 = [1, 2, 3, 4, 5]
def func(a, b):
return a + b
result = functools.reduce(func,list1)
print(result) # 15
- filter()
filter(func,lst)函数用于过滤序列,过滤掉不符合条件的元素,返回一个filter对象。如果要转换成列表,可以使用list()来转换。
list1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
def func(x):
return x % 2 == 0
result = filter(func, list1)
print(list(result)) # [2, 4, 6, 8, 10]