Python函数式编程模块functools的使用与实践

 更新时间:2024年03月07日 15:46:08   作者:盗理者  
本文主要介绍了Python函数式编程模块functools的使用与实践,教你如何使用 functools.partial、functools.wraps、functools.lru_cache 和 functools.reduce,感兴趣的可以了解一下

介绍

functools 模块是 Python 的标准库之一,它提供了一系列用于函数操作的函数。使用这些函数可以编写更简洁、更高效的代码,尤其是在函数式编程范式中。以下是对 functools 模块中一些重要功能做的一个分享

functools 模块的功能

functools.partial

functools.partial 函数用于创建一个新的函数,这个新函数是原始函数的一个偏应用,即固定函数的一些参数。

from functools import partial
# 定义一个函数,需要多个参数
def power(base, exponent):
    return base ** exponent
# 使用 functools.partial 创建一个偏函数,只保留一个参数
square = partial(power, exponent=2)
# 调用偏函数
print(square(4))  # 输出: 16

在这里插入图片描述

functools.wraps

functools.wraps 装饰器用于保留被包装函数的元信息,如文档字符串、名称和参数列表。

from functools import wraps
# 定义一个函数
def my_function(a, b):
    """函数"""
    return a + b
# 使用 functools.wraps 装饰器包装一个函数
@wraps(my_function)
def wrapper(c, d):
    return my_function(c, d)
# 检查 wrapper 函数的元信息
print(wrapper.__doc__)  # 输出:函数
print(wrapper.__name__)  # 输出:my_function

在这里插入图片描述

functools.lru_cache

functools.lru_cache 装饰器用于缓存函数的返回值,这对于避免重复计算昂贵的函数调用非常有用。

from functools import lru_cache
@lru_cache(maxsize=None)
def fibonacci(n):
    if n <= 1:
        return n
    return fibonacci(n - 1) + fibonacci(n - 2)
# 调用 fibonacci 函数
print(fibonacci(100))  # 354224848179261915075

在这里插入图片描述

functools.reduce

functools.reduce 函数用于将一个二元操作函数累积地应用到一个序列的所有元素上,从左到右,直到序列结束。

from functools import reduce
# 定义一个函数,计算乘积
def multiply(x, y):
    return x * y
# 使用 reduce 计算 [1, 2, 3, 4] 的乘积
print(reduce(multiply, [1, 2, 3, 4]))  # 输出: 24

在这里插入图片描述

实例演示

使用 functools.partial 创建固定参数的函数

from functools import partial
def add(a, b, c):
    return a + b + c
partial_add = partial(add, c=5)
print(partial_add(1, 2))  # 输出: 8

在这里插入图片描述

使用 functools.wraps 保留原函数的文档字符串和名称

from functools import wraps
def my_function(a, b):
    """函数"""
    return a + b
@wraps(my_function)
def my_wrapper(c, d):
    return my_function(c, d)
print(my_wrapper.__doc__)  # 输出:函数

在这里插入图片描述

使用 functools.lru_cache 加速函数的执行

from functools import lru_cache
@lru_cache(maxsize=128)
def memoized_factorial(n):
    if n == 0:
        return 1
    return n * memoized_factorial(n - 1)
print(memoized_factorial(5))  # 输出: 120

在这个例子中,memoized_factorial 函数使用 lru_cache 来缓存之前计算的结果。这意味着当函数被重复调用时,如果之前已经计算过相同参数的结果,functools 将返回缓存的结果,而不是重新计算。

在这里插入图片描述

使用 functools.reduce 实现自定义的 reduce 操作

from functools import reduce

def average(total, new_value):
    return total + new_value

result = reduce(average, [1, 2, 3, 4], 0) / len([1, 2, 3, 4])
print(result)  # 输出: 2.5

在这里插入图片描述

在这个例子中,定义了一个 average 函数,它将一个新值加到总和中。然后使用 reduce 函数来应用这个 average 函数到列表 [1, 2, 3, 4] 上,初始值为 0。这样就得到了列表的平均值。

functools 模块为 Python 的函数式编程提供了许多有用的工具。通过学习如何使用 functools.partialfunctools.wrapsfunctools.lru_cache 和 functools.reduce,可以更加高效地处理函数和数据集合。这些功能不仅可以提高代码的性能,还可以使代码更加清晰和易于维护。

到此这篇关于Python函数式编程模块functools的使用与实践的文章就介绍到这了,更多相关Python functools内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 微信跳一跳自动运行python脚本

    微信跳一跳自动运行python脚本

    这篇文章主要为大家详细介绍了微信小程序跳一跳自动运行脚本,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-01-01
  • Python Joblib库使用方法案例总结

    Python Joblib库使用方法案例总结

    Python Joblib库是一个用于并行计算和数据预处理的工具库。它可以帮助用户快速处理大量数据,提高计算效率。其中,最常用的功能是并行计算,可以使用多个CPU核心同时处理任务,大大缩短计算时间。此外,Joblib还提供了一些数据预处理的功能,可以帮助用户更好地处理数据
    2023-06-06
  • 基于Python闭包及其作用域详解

    基于Python闭包及其作用域详解

    下面小编就为大家带来一篇基于Python闭包及其作用域详解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-08-08
  • 使用Python自动化创建和扫描二维码

    使用Python自动化创建和扫描二维码

    二维码(Quick Response code)已成为在物理和数字领域之间架起桥梁的多功能工具,从分享联系信息和网站链接到促进支付和跟踪库存,二维码在各个行业中找到了应用,本文将展示如何使用Python自动化创建和扫描二维码,感兴趣的朋友可以参考下
    2024-07-07
  • django将网络中的图片,保存成model中的ImageField的实例

    django将网络中的图片,保存成model中的ImageField的实例

    今天小编就为大家分享一篇django将网络中的图片,保存成model中的ImageField的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-08-08
  • Python中Selenium模拟JQuery滑动解锁实例

    Python中Selenium模拟JQuery滑动解锁实例

    这篇文章主要介绍了Python中Selenium模拟JQuery滑动解锁实例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-07-07
  • python使用7z解压软件备份文件脚本分享

    python使用7z解压软件备份文件脚本分享

    这篇文章主要介绍了python使用7z解压软件备份文件脚本,需要的朋友可以参考下
    2014-02-02
  • Python限制内存和CPU使用量的方法(Unix系统适用)

    Python限制内存和CPU使用量的方法(Unix系统适用)

    这篇文章主要介绍了Python限制内存和CPU的使用量的方法,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-08-08
  • python模拟登陆阿里妈妈生成商品推广链接

    python模拟登陆阿里妈妈生成商品推广链接

    这篇文章主要介绍了python模拟登陆阿里妈妈生成商品推广链接,需要的朋友可以参考下
    2014-04-04
  • Python+drawpad实现CPU监控小程序

    Python+drawpad实现CPU监控小程序

    这篇文章主要为大家详细介绍了如何利用Python+drawpad实现一个简单的CPU监控小程序,文中示例代码讲解详细,感兴趣的小伙伴可以尝试一下
    2022-08-08

最新评论