高阶函数
1.函数的分类
1. 自定义函数:在函数式编程中,为了满足复杂的业务逻辑而设计。适用于处理更大的业务逻辑。
2. 内置函数:底层已经写好的,实现一些简单的功能作为工具使用。
2.四大高阶函数 [map, reduce, filter, sorted]
2.1 map(function, iterable)
1.参数说明
function:一个函数
Iterable:可迭代对象
2.函数作用:将可迭代对象的每一个元素传入函数中,实现相同的操作,最后返回一个迭代器。
2.2 reduce(function, Iterable)
1.参数说明
function:一个函数
Iterable:可迭代对象
2.函数作用:将可迭代对象的第一二个元素传入函数内,对可迭代对象的元素进行累计操作。
2.3 filter(function, Iterable)
1.参数说明
function:一个函数
Iterable:可迭代对象
2.函数作用:根据function内的规则筛选可迭代对象中的元素,如果function返回True,这个元素保留,否则,抛弃掉
2.4 sorted(Iterable, key=abs, reverse=False)
1.参数说明:
Iterable:可迭代对象
key:指定函数作用域可迭代对象上的每一个元素,并根据key返回的结果进行排序
reverse:排序规则,True降序,
2.函数作用:将可迭代对象传入key指定的函数中,key需要返回一个结果,sorted会根据key返回的结果进行排序,并将所有的元素放置在一个列表中,排序的升降序根据reverse而定。
3. 匿名函数
3.1匿名函数的介绍
1.匿名函数:
在python中,定义函数需要使用def关键字。但在python中还提供了一种表达式形式来定义函数的。这个表达式返回一个函数本身。但并没有赋值给一个变量。这个表达式就称之为匿名函数或lambda表达式。
3.2 匿名函数的语法
lambda argument1, argument2, ...: expression(表达式)
1.argument1:传入匿名函数的参数
2.expression:表达式
3.lambda表达式中的参数可以按需传入,表达式是否有返回值应该根据实际需求实现
3.3 应用场景
1. 在def不可以出现的地方
2. 简单优于复杂
num = input("数:")
if num > 5:
print("你好")
else:
print("你不好")
num = input("数:")
ret = "你好" if num > 5 else "你不好"
print("ret")
4.递归函数
一个函数在内部调用自身,这个函数就是递归函数
def func(n):
if n == 1:
return 1
else:
return n * func(n - 1)
print(func(5))
缺点:缺点是过审的调用会导致栈溢出。
5.闭包
a, b = 1, 2
c, d = [4, 5]
4.1 闭包讲解
闭包的定义:阿紫一个外层函数中定义了一个函数,内函数里运用了万函数的临时变量,并且圈外函数的返回值是内函数的引用。这个内层函数就是闭包。
1.内层函数与完成函数
2.内层函数引用完成函数局部变量
3.外层函数返回内层函数的引用或者直接返回内层函数的调用(在外层函数返回内层函数的函数名)
闭包的验证使用__closure__方法,如果返回celll则代表是闭包,如果返回None则不是闭包。(闭包的函数名.__closure__)
4.2 闭包的优点
由于闭包是内层函数调用外层函数的变量,在python中规定:如果内层函数访问外层函数的变量,则函数运行结束后这个变量并不会被销毁,而是常驻内存中,以便后续的调用。
5.装饰器
装饰器:在不改变函数原有代码的基础上,添加额外的功能。
1.装饰器需要有外层函数和内层函数
2.在装饰器的内层函数中调用要被装饰的函数
3.在外层函数中不要忘记返回内层函数的引用
4.外层函数就是那个装饰器