Python模块之functools

前言

这几年一直在it行业里摸爬滚打,一路走来,不少总结了一些python行业里的高频面试,看到大部分初入行的新鲜血液,还在为各样的面试题答案或收录有各种困难问题

于是乎,我自己开发了一款面试宝典,希望能帮到大家,也希望有更多的Python新人真正加入从事到这个行业里,让python火不只是停留在广告上。

微信小程序搜索:Python面试宝典

或可关注原创个人博客:https://lienze.tech

也可关注微信公众号,不定时发送各类有趣猎奇的技术文章:Python编程学习

functools模块

作用于或返回其他函数的函数,一般来说,任何可调用对象都可以作为这个模块的用途来处理

lru_cache

functools.lru_cache(maxsize=128, typed=False)

functools.lru_cache的作用主要是用来做缓存,他能把相对耗时的函数结果进行保存,避免传入相同的参数重复计算

同时,缓存并不会无限增长,不用的缓存会被释放

Least Recently Used

maxsize: 代表缓存的内存占用值,超过这个值之后,就的结果就会被释放,然后将新的计算结果进行缓存,其值应当设为2的幂
typed: 若为True,则会把不同的参数类型得到的结果分开保存

lru_cache 装饰的函数会有 cache_clearcache_info 两个方法,分别用于清除缓存和查看缓存信息

from functools import lru_cache

@lru_cache(None)
def add(x, y):
    print("运算结果: %s + %s = " % (x, y),end="")
    return x + y

print(add(1, 2))
print(add(1, 2))
print(add(2, 3))

partial

functools.partial(func, *args, **keywords)

partial也称作偏函数,可以将某个函数的参数从左向右依次给予默认值,并返回一个新的函数对象

class partial(builtins.object)
	partial(func, *args, **keywords) - new function with partial application
	of the given arguments and keywords.
from functools import partial
def func(x,y):
    print('x:',x)
    print('y:',y)
    return x + y 
new_ = partial(func,1,2)
new_()
-------效果-------
x: 1
y: 2
3

可以简化函数调用过程,将固定参数直接通过partial方法进行绑定

reduce

reduce(function, sequence[, initial]) -> value

进行累计运算

reduce(lambda x,y : x + y, range(5))

wraps

functools.wraps旨在消除装饰器对原函数造成的影响,即对原函数的相关属性进行拷贝,已达到装饰器不修改原函数的目的

  • 传统的装饰器装饰结束之后会导致被装饰函数属性发生改变
import functools
def decorator(f):
    @functools.wraps(f)
    def wapper(*args,**kwargs):
        return f(*args,**kwargs)
    return wapper

@decorator
def f(a,b):
    return a + b
f.__name__ 

  • 结果
'wapper'

可以通过wraps进行这样影响的消除

import functools
def decorator(f):
    @functools.wraps(f) # 消除被装饰函数f的属性影响
    def wapper(*args,**kwargs):
        return f(*args,**kwargs)
    return wapper

@decorator
def f(a,b):
    return a + b
f.__name__
# f
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李恩泽的技术博客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值