当前位置:首页 > 科技  > 软件

Python库functools示例详解

来源: 责编: 时间:2024-04-28 17:20:09 265观看
导读functoolsfunctools 是 Python 标准库中一个极为实用的模块,提供了许多用于处理函数、高阶函数以及函数式编程的工具。1. functools.partial用途: 创建一个新函数,它固定了原函数的部分参数。示例:from functools impor

functools

xya28资讯网——每日最新资讯28at.com

functools 是 Python 标准库中一个极为实用的模块,提供了许多用于处理函数、高阶函数以及函数式编程的工具。xya28资讯网——每日最新资讯28at.com

1. functools.partial

用途: 创建一个新函数,它固定了原函数的部分参数。xya28资讯网——每日最新资讯28at.com

示例:xya28资讯网——每日最新资讯28at.com

from functools import partialdef power(base, exponent):    return base ** exponent# 创建一个固定底数为2的新函数square = partial(power, base=2)# 调用新函数只需传递指数print(square(3))  # 输出: 8

2. functools.update_wrapper / functools.wraps

用途: 在编写装饰器时,保持被装饰函数的元信息(如名称、文档字符串、注解等)不变。xya28资讯网——每日最新资讯28at.com

示例:xya28资讯网——每日最新资讯28at.com

from functools import wrapsdef add_logging(func):    @wraps(func)    def wrapper(*args, **kwargs):        print(f"Calling {func.__name__} with arguments {args}, {kwargs}")        result = func(*args, **kwargs)        print(f"{func.__name__} returned: {result}")        return result    return wrapper@add_loggingdef greet(name):    """Greet someone by their name."""    return f"Hello, {name}!"print(greet.__name__)  # 输出: greetprint(greet.__doc__)   # 输出: Greet someone by their name.greet("Alice")  # 输出: Calling greet with arguments ('Alice',), {} 和 "greet returned: Hello, Alice!"

3. functools.total_ordering

用途: 通过实现一个或少数几个关键比较方法(如 __eq__ 和 __lt__),自动为一个类生成所有必要的比较方法(如 __le__, __gt__, __ge__, __ne__)。xya28资讯网——每日最新资讯28at.com

示例:xya28资讯网——每日最新资讯28at.com

from functools import total_ordering@total_orderingclass Person:    def __init__(self, name, age):        self.name = name        self.age = age    def __eq__(self, other):        return self.name == other.name and self.age == other.age    def __lt__(self, other):        return self.age < other.age# 自动拥有所有比较方法,如 __le__, __gt__, __ge__, __ne__p1 = Person("Alice", 25)p2 = Person("Bob", 30)print(p1 <= p2)  # 输出: Trueprint(p1 > p2)   # 输出: False

4. functools.lru_cache

用途: 实现函数结果的缓存,以提高性能。基于“最近最少使用”(Least Recently Used, LRU)策略自动丢弃旧的缓存项。xya28资讯网——每日最新资讯28at.com

示例:xya28资讯网——每日最新资讯28at.com

from functools import lru_cache@lru_cache(maxsize=32)def fibonacci(n):    if n < 2:        return n    return fibonacci(n - 1) + fibonacci(n - 2)# 多次调用相同参数时,从缓存中获取结果,避免重复计算print(fibonacci(20))  # 第一次调用进行计算print(fibonacci(20))  # 第二次调用直接使用缓存

5. functools.reduce

用途: 对一个可迭代对象(如列表)应用一个累积函数,从左到右将元素两两结合,返回单一结果。xya28资讯网——每日最新资讯28at.com

示例:xya28资讯网——每日最新资讯28at.com

from functools import reducenumbers = [1, 2, 3, 4, 5]# 计算列表元素的乘积product = reduce(lambda x, y: x * y, numbers)print(product)  # 输出: 120

6. functools.cmp_to_key

用途: 将旧式的比较函数(接受两个参数并返回负数、零或正数表示小于、等于或大于)转换为可用于排序的键函数。xya28资讯网——每日最新资讯28at.com

示例:xya28资讯网——每日最新资讯28at.com

from functools import cmp_to_keydef compare_names(name1, name2):    if name1 < name2:        return -1    elif name1 > name2:        return 1    else:        return 0names = ["Alice", "Bob", "Charlie", "David"]# 使用旧式比较函数进行排序sorted_names = sorted(names, key=cmp_to_key(compare_names))print(sorted_names)  # 输出: ['Alice', 'Bob', 'Charlie', 'David']

以上示例

涵盖了 functools 模块中一些常用且重要的功能,包括部分函数应用、装饰器元信息保留、简化类比较方法、函数缓存、累积计算以及旧式比较函数的转换。根据实际需求,可以灵活运用这些工具来增强代码的简洁性、效率和可读性。xya28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-86210-0.htmlPython库functools示例详解

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: Python 处理图片的十个库

下一篇: C++函数传递二维数组的三种方法

标签:
  • 热门焦点
  • 7月安卓手机性能榜:红魔8S Pro再夺榜首

    7月份的手机市场风平浪静,除了红魔和努比亚带来了两款搭载骁龙8Gen2领先版处理器的新机之外,别的也想不到有什么新品了,这也正常,通常6月7月都是手机厂商修整的时间,进入8月份之
  • 5月iOS设备性能榜:M1 M2依旧是榜单前五

    和上个月一样,没有新品发布的iOS设备性能榜的上榜设备并没有什么更替,仅仅只有跑分变化而产生的排名变动,刚刚开始的苹果WWDC2023,推出的产品也依旧是新款Mac Pro、新款Mac Stu
  • 一文看懂为苹果Vision Pro开发应用程序

    译者 | 布加迪审校 | 重楼苹果的Vision Pro是一款混合现实(MR)头戴设备。Vision Pro结合了虚拟现实(VR)和增强现实(AR)的沉浸感。其高分辨率显示屏、先进的传感器和强大的处理能力
  • 一篇聊聊Go错误封装机制

    %w 是用于错误包装(Error Wrapping)的格式化动词。它是用于 fmt.Errorf 和 fmt.Sprintf 函数中的一个特殊格式化动词,用于将一个错误(或其他可打印的值)包装在一个新的错误中。使
  • 一文掌握 Golang 模糊测试(Fuzz Testing)

    模糊测试(Fuzz Testing)模糊测试(Fuzz Testing)是通过向目标系统提供非预期的输入并监视异常结果来发现软件漏洞的方法。可以用来发现应用程序、操作系统和网络协议等中的漏洞或
  • 共享单车的故事讲到哪了?

    来源丨海克财经与共享充电宝相差不多,共享单车已很久没有被国内热点新闻关照到了。除了一再涨价和用户直呼用不起了。近日多家媒体再发报道称,成都、天津、郑州等地多个共享单
  • 华为Mate60标准版细节曝光:经典星环相机模组回归

    这段时间以来,关于华为新旗舰的爆料日渐密集。据此前多方爆料,今年华为将开始恢复一年双旗舰战略,除上半年推出的P60系列外,往年下半年的Mate系列也将
  • 超级标准版旗舰!iQOO 11S全球首发iQOO超算独显芯片

    上半年已接近尾声,截至目前各大品牌旗下的顶级旗舰都已悉数亮相,而下半年即将推出的顶级旗舰已经成为了数码圈爆料的主流,其中就包括全新的iQOO 11S系
  • iQOO Neo8 Pro评测:旗舰双芯加持 最强性能游戏旗舰

    【Techweb评测】去年10月,iQOO推出了一款Neo7手机,该机搭载了联发科天玑9000+,配备独显芯片Pro+,带来了同价位段最佳的游戏体验,一经上市便受到了诸多用
Top