美文网首页Python小哥哥
python中的functools模块

python中的functools模块

作者: 我爱学python | 来源:发表于2019-05-03 16:31 被阅读30次

functools模块可以作用于所有的可以被调用的对象,包括函数 定义了__call__方法的类等

1 functools.cmp_to_key(func)

将比较函数(接受两个参数,通过比较两个参数的大小返回负值,0,或者正数)转换为key function(返回一个值用来比较或者排序的可调用对象),

例如: sorted(iterable, functools.cmp_to_key(locale.strcoll))

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

首先这是一个装饰器

其次,介绍一下LRU算法:

LRU是最常用的缓存算法,全称叫“Least Recently Used”,顾名思义,就是在缓存miss 并且缓存空间已满的时候,将最久没访问过的数据删除从而腾出空间。

然后,说一下这个装饰器的两个参数的含义:

maxsize: 表示缓存大小,如果设置为None,表示不限制,设置为0表示不启用缓存机制

typed:如果设置为True,则该装饰器所装饰的函数的参数即使值相等(比如说 3 == 3.0 ),但类型不同(一个是整型一个是浮点),也会被区分对待为不同的缓存

然后,说明一下这个装饰器对所装饰的函数的要求,

1 函数的参数接收的值必须是不可变对象,像字符串,数字,元组等都属于此列

2 其次函数返回的对象最好也是不可变对象,当然这一点

来一个栗子:

3 @functools.total_ordering

首先这是一个类装饰器,这个类装饰器要求它所定义的类中必须定义:

1  小于__lt__(), 小于等于__le__(),大于__gt__(),大于等于__ge__()中的一个

2  还要定义等于__eq__()方法。

只要我们按照要求定义了这些方法,该装饰器就会为我们完成其余的比较排序方法 。

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

类似于这样:

实际上就是给某个函数加上几个固定参数然后返回一个新的函数,对于多个对象更新相同的值来说可以用到。比如:

5 class functools.partialmethod(func, *args, **keywords)

作用类似于上面的partial函数,但这个方法作用于类的方法,返回的是方法而不是函数。

6 functool.update_wrapper(wrapper, wrapped[, assigned][, updated])

 functools.wraps(wrapped[, assigned][, updated])

    在python中,当一个函数被装饰器装饰后,这个函数名字对应的函数对象实际上是那个装饰器函数,也就是该函数名对应的的__name__以及__doc__实际上已经改变了,这就导致很难调试。而update_wrapper以及wraps就是用来解决这个问题。

相关文章

  • functools

    functools模块里存放的是一些工具函数,在使用前需要导入functools模块,在python3.X中,可以...

  • 那些Python方法---reduce()

    python3中reduce被放到了functools模块,所以用之前需要导入 from functools im...

  • 每周一个 Python 模块 | itertools

    系列文章列表:每周一个 Python 模块 | functools Python 标准库模块 itertools ...

  • python中的functools模块

    functools模块可以作用于所有的可以被调用的对象,包括函数 定义了__call__方法的类等 1 funct...

  • Python @cache 简化无限缓存

    Python 内置模块 functools 提供的高阶函数 @functools.cache 是简单轻量级无长度限...

  • 每周一个 Python 模块 | functools

    functools 是 Python 中很简单但也很重要的模块,主要是一些 Python 高阶函数相关的函数。 该...

  • Python functools 模块

    functools 是 Python 中很简单但也很重要的模块,主要是一些 Python 高阶函数相关的函数。 该...

  • Python 模块简介 -- functools

    Python 的 functools 模块可以说主要是为函数式编程而设计,用于增强函数功能。 functools....

  • Python的高阶函数reduce

    reduce() 函数在 python 2 是内置函数, 从python 3 开始移到了 functools 模块...

  • python 模块 - functools

    functools 模块应用于高阶函数,即参数或(和)返回值为其他函数的函数。通常来说,此模块的功能适用于所有可调...

网友评论

    本文标题:python中的functools模块

    本文链接:https://www.haomeiwen.com/subject/dfkznqtx.html