functools模块中的内置函数使用(69)

functools 是一个官方库,模块是用于高阶函数,即——参数或(和)返回值为其他函数的函数。通常来说,此模块的功能适用于所有可调用对象。

functools 这个库提供了三个内置函数:partial, lru_cache, wraps

1.partial函数

  • 作用:给函数的参数设置默认值(提前给参数设置固定的值)

  • 用法:

     1.如果每次传参是 X 值都是不变的,都是 Y,那就可以使用partial函数
     2.使用partial函数,将 X 的值设定为默认值,用一个新的变量接收,去调用新变量的时候只需要传其他值即可
     3.如果参数设置了默认值,在传参是也给值,生效传参的值
    

实例1:

  • 这个函数去调用时,第一个值传的值都是一样的,那就可以用partial函数

    def work(name,age,sex):
        print(name,age,sex)
    
    # 每次传参是name都不变,都是henry
    work("henry",22,33)
    work("henry",44,55)
    work("henry",66,77)
    
  • 使用partial函数,将name的值设定为默认值,去调用的时候只需要传其他值即可

    # 将name='henry'  设定为默认值
    work1 = partial(work,name='henry')   
    
    # 传值只需要传age,sex
    work1(age=12,sex=99)    # 打印结果为:henry 18 99
    
    # 如果参数设置了默认值,在传参是也给值,生效传参的值
    work1(name='henry',age=88,sex=99)      # 打印结果为:henry1 88 99
    

    结果:
    在这里插入图片描述

2. wraps函数的使用

  • 作用:将一个函数的特殊属性保存到另一个函数上

  • 应用场景:消除装饰器的副作用

实例2:定义一个函数1

# 定义一个func的函数
def func():
    '''这是fun函数的注释文档'''
    print("-------------- func 函数 ---------------")

func()
print(func.__name__,func.__doc__,func.__dict__)
  1. func.name : 获取函数名
  2. func.doc:获取函数的文档字符串注释
  3. func.dict:获取函数的属性字典

执行结果:
在这里插入图片描述

实例3:

  • 在定义一个函数2, 使用 @wraps(函数1) 继承函数1的一切属性,去打印函数2时显示函数1的属性
# @wraps(func)
def app():
    '''这是app函数的注释文档'''
    print("-------------- app 函数 ---------------")


print(app.__name__,app.__doc__,app.__dict__)
app()

打印结果,属性是函数1 的属性
在这里插入图片描述

3. lru_cache函数的使用

  • 作用:为函数提供缓存功能的装饰器,对函数执行的结果进行缓存

  • 应用场景:提升递归函数的执行效率

  • 用法:

     1. @lru_cache(maxsize=128)    # 设置的最大缓存字节
     2. 缓存同一个函数相同参数执行的结果
    

实例4:

@lru_cache(maxsize=128)      # 设置的最大缓存字节
def work(n):
    if n == 1:
        return 1
    else:
        return work(n - 1) * n


print(work(100))
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值