Python的functools模块使用及说明

 更新时间:2022年07月14日 11:03:39   作者:Python之简  
这篇文章主要介绍了Python的functools模块使用及说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

partial

用于创建一个偏函数,将默认参数包装一个可调用对象,返回结果也是可调用对象。

偏函数可以固定住原函数的部分参数,从而在调用时更简单。

from functools import partial

int2 = partial(int, base=8)
print(int2('123'))
# 83

update_wrapper

使用 partial 包装的函数是没有__name__和__doc__属性的。

update_wrapper 作用:将被包装函数的__name__等属性,拷贝到新的函数中去。

from functools import update_wrapper
def wrap2(func):
    def inner(*args):
        return func(*args)
    return update_wrapper(inner, func)

@wrap2
def demo():
    print('hello world')

print(demo.__name__)
# demo

wraps

warps 函数是为了在装饰器拷贝被装饰函数的__name__。

就是在update_wrapper上进行一个包装

from functools import wraps
def wrap1(func):
    @wraps(func)    # 去掉就会返回inner
    def inner(*args):
        print(func.__name__)
        return func(*args)
    return inner

@wrap1
def demo():
    print('hello world')

print(demo.__name__)
# demo

reduce

在 Python2 中等同于内建函数 reduce

函数的作用是将一个序列归纳为一个输出

reduce(function, sequence, startValue)

from functools import reduce

l = range(1,50)
print(reduce(lambda x,y:x+y, l))
# 1225

cmp_to_key

在 list.sort 和 内建函数 sorted 中都有一个 key 参数

x = ['hello','worl','ni']
x.sort(key=len)
print(x)
# ['ni', 'worl', 'hello']

Python3 之前还提供了cmp参数来比较两个元素

cmp_to_key 函数就是用来将老式的比较函数转化为 key 函数

lru_cache

允许我们将一个函数的返回值快速地缓存或取消缓存。

该装饰器用于缓存函数的调用结果,对于需要多次调用的函数,而且每次调用参数都相同,则可以用该装饰器缓存调用结果,从而加快程序运行。

该装饰器会将不同的调用结果缓存在内存中,因此需要注意内存占用问题。

from functools import lru_cache
@lru_cache(maxsize=30)  # maxsize参数告诉lru_cache缓存最近多少个返回值
def fib(n):
    if n < 2:
        return n
    return fib(n-1) + fib(n-2)
print([fib(n) for n in range(10)])
fib.cache_clear()   # 清空缓存

singledispatch

单分发器, Python3.4新增,用于实现泛型函数。

根据单一参数的类型来判断调用哪个函数。

from functools import singledispatch
@singledispatch
def fun(text):
    print('String:' + text)

@fun.register(int)
def _(text):
    print(text)

@fun.register(list)
def _(text):
    for k, v in enumerate(text):
        print(k, v)

@fun.register(float)
@fun.register(tuple)
def _(text):
    print('float, tuple')
fun('i am is hubo')
fun(123)
fun(['a','b','c'])
fun(1.23)
print(fun.registry)    # 所有的泛型函数
print(fun.registry[int])    # 获取int的泛型函数
# String:i am is hubo
# 123
# 0 a
# 1 b
# 2 c
# float, tuple
# {<class 'object'>: <function fun at 0x106d10f28>, <class 'int'>: <function _ at 0x106f0b9d8>, <class 'list'>: <function _ at 0x106f0ba60>, <class 'tuple'>: <function _ at 0x106f0bb70>, <class 'float'>: <function _ at 0x106f0bb70>}
# <function _ at 0x106f0b9d8>

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 简明 Python 基础学习教程

    简明 Python 基础学习教程

    无论您刚接触电脑还是一个有经验的程序员,本书都将有助您学习使用Python语言
    2007-02-02
  • 详解Python中的上下文管理器原理

    详解Python中的上下文管理器原理

    这篇文章主要为大家详细介绍了Python中的上下文管理器的原理与使用,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-03-03
  • 表格梳理python内置数学模块math分析详解

    表格梳理python内置数学模块math分析详解

    这篇文章主要为大家介绍了python内置数学模块math的分析详解,文中通过表格梳理的方式以便让大家在学习过程中一目望去清晰明了,有需要的朋友可以借鉴参考下
    2021-10-10
  • Python+OpenCV人脸检测原理及示例详解

    Python+OpenCV人脸检测原理及示例详解

    这篇文章主要为大家详细介绍了Python+OpenCV人脸检测原理及示例,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-12-12
  • 75条笑死人的知乎神回复,用60行代码就爬完了

    75条笑死人的知乎神回复,用60行代码就爬完了

    这篇文章主要介绍了python爬取知乎回复,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-05-05
  • Python+Selenium自动化环境搭建与操作基础详解

    Python+Selenium自动化环境搭建与操作基础详解

    Selenium是如今最常用的自动化测试工具之一,支持快速开发自动化测试框架,且支持在多种浏览器上执行测试。本文将介绍关于Selenium Python自动化脚本环境搭建的相关资料,需要的朋友可以参考下
    2022-03-03
  • Python数据处理的三个实用技巧分享

    Python数据处理的三个实用技巧分享

    数据处理无所不在,掌握常用技巧,事半功倍。这篇文章将使用Pandas开展数据处理分析,总结其中常用、好用的数据分析技巧,感兴趣的可以学习一下
    2022-04-04
  • Python检测QQ在线状态的方法

    Python检测QQ在线状态的方法

    这篇文章主要介绍了Python检测QQ在线状态的方法,涉及Python通过第三方平台检测QQ在线状态的技巧,非常简单实用,需要的朋友可以参考下
    2015-05-05
  • 详解基于pycharm的requests库使用教程

    详解基于pycharm的requests库使用教程

    本文主要介绍了基于pycharm的requests库使用教程,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01
  • Pytorch之上/下采样函数torch.nn.functional.interpolate插值详解

    Pytorch之上/下采样函数torch.nn.functional.interpolate插值详解

    这篇文章主要介绍了Pytorch之上/下采样函数torch.nn.functional.interpolate插值,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-04-04

最新评论