python高阶函数与装饰器

																		高阶函数

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而定。
# 复习
# 列表的sort方法,返回的是None,该方法直接操作元数据
# sorted: 将列表copy一份,返回排序过后的
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.递归函数
# 定义
一个函数在内部调用自身,这个函数就是递归函数
# 阶乘 ————>5的阶乘(5*4*3*2*1)
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.外层函数就是那个装饰器
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值