functools模块:让Python编程更高效

news2024/11/30 14:44:16

​​​​​​​       


 

概要

不知道小伙伴们在Python编程中,我们经常会遇到一些需要反复使用的代码片段,例如装饰器、高阶函数等。为了提高代码的复用性和可读性,Python提供了functools模块。functools模块包含了许多实用的功能,可以帮助我们更好地编写和优化Python代码。本文将详细介绍functools模块的主要功能,并通过实例演示如何使用这些功能来提高我们的编程效率。

functools 是 Python 的一个内置模块,提供了一些方便的函数工具。下面是 functools 模块中其中一些常用函数的详细使用:

functools.partial

用于给一个已有函数设定默认参数,返回一个新函数。新函数的调用方式与原有函数调用方式相同,所以它非常适合做一些常规参数设置,来减少代码中的重复部分。举例来说,假设我们有一个计算平方的函数,我们想设定它的默认参数为 2,可以使用如下代码:

import functools
def square(base, power):
    return base ** power

square_2 = `functools.partial(square, power=2)
print(square_2(4)) 
# 输出16

functools.reduce

该函数用于对一个序列中的项进行使用累计函数进行合并,最终得到一个单一的结果。例如,我们要对一个序列中的所有数字进行求和,可以使用下面的代码:

import functools

def addition(a, b):
    return a+b

numbers = [1, 2, 3, 4, 5]

print(`functools`.reduce(addition, numbers)) # 输出 15

functools.lru_cache:

该函数可以为函数添加一个 LRU 缓存,最近最少使用缓存,以提高函数调用效率。所以在需要重复调用、计算,但返回值较为稳定的函数中使用该装饰器后,可大幅提高程序执行效率。

import functools

@functools.lru_cache(maxsize=128)
def fib(n):
    if n < 2:
        return n
    return fib(n-1) + fib(n-2)

functools.wraps:

该函数可以将一个函数的元数据,如 docstring, name, module, annotations 等,拷贝到被装饰函数中。

import functools

def my_decorator(func):
    @`functools`.wraps(func)
    def wrapper(*args, **kwargs):
        print(f"Calling function {func.__name__}")
        return func(*args, **kwargs)
    return wrapper

@my_decorator
def greet(name):
    """Greet someone by name."""
    print(f"Hello, {name}!")

print(greet.__name__) # 输出 greet
print(greet.__doc__) # 输出 Greet someone by name.

functools.cached_property

缓存一个对象的属性值。当属性访问时,如果值不存在,则调用指定的方法获取该值,并将其存储在对象实例中,下一次访问时可以直接返回存储在对象中的值,而不需要重新计算。

import functools

class MyClass:
    def __init__(self, x, y):
        self.x = x
        self.y = y

    @functools.cached_property
    def my_property(self):
        print("Calculating my_property")
        return self.x + self.y

obj = MyClass(1, 2)
print(obj.my_property) # 输出 3
print(obj.my_property) # 输出 3,不再计算

functools.singledispatch

实现基于参数类型的多态功能。可以使用 singledispatch 修饰默认方法,从而实现函数在不同参数下的不同行为。

import functools

@functools.singledispatch
def calculate_area(shape):
    raise NotImplementedError(f"Unsupported shape: {shape!r}")

@calculate_area.register
def _(rectangle):
    return rectangle.width * rectangle.height

class Rectangle:
    def __init__(self, width, height):
        self.width = width
        self.height = height

rec = Rectangle(3, 4)
print(calculate_area(rec)) # 输出 12

除了上述常用函数外,还有其他一些有用的函数,如 functools.partialmethod、``functools.total_ordering等,它们均可以帮助开发者更加方便地编写出更高效、更易维护的Python` 代码。

总结:

通过本文的学习,我们了解了functools模块的主要功能,包括偏函数、装饰器、缓存、组合等。这些功能可以帮助我们更好地编写和优化Python代码,提高编程效率。作为Python开发者,我们应该充分利用functools模块,将其融入到我们的编程实践中,从而编写出更加简洁、高效的代码。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1159441.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

软文推广方案,媒介盒子分享

作为企业宣传的手段&#xff0c;它能用较低的成本获得较好的宣传效果&#xff0c;但有许多企业在进行软文推广时并不起效&#xff0c;这是因为没掌握好方法。今天媒介盒子就来告诉大家&#xff0c;通用的软文推广方案。 一、 明确推广目标以及受众 明确软文推广的目标有助于明…

数字化如何赋能企业降本增效?

在当前高度不确定的市场环境下&#xff0c;降本增效已成为传统企业热议的话题。在这个背景下&#xff0c;企业内部各种“卷”现象层出不穷&#xff0c;各部门都在积极降本、开源节流&#xff0c;同时也在争夺本就不足的企业资源。因此&#xff0c;数字部门在资源受限的情况下&a…

人工智能基础_机器学习016_BGD批量梯度下降求解多元一次方程_使用SGD随机梯度下降计算一元一次方程---人工智能工作笔记0056

然后上面我们用BGD计算了一元一次方程,那么现在我们使用BGD来进行计算多元一次方程 对多元一次方程进行批量梯度下降. import numpy as np X = np.random.rand(100,8) 首先因为是8元一次方程,我们要生成100行8列的X的数据对应x1到x8 w = np.random.randint(1,10,size = (8…

[移动通讯]【Carrier Aggregation-10】【 Radio Resource Control (RRC) Aspects】

前言&#xff1a; 参考《4G/LTE - LTE Advanced》 Carrier Aggregation is a special form of LTE technology that enables UE and Network to use more than one carrier frequencies. Actually this is not a new concept in LTE. You might have used/heard Dual Carrier …

Django3框架-(3)-[使用websocket]:使用channels实现websocket功能;简化的配置和实际使用方式

概述&#xff1a; 对于Django使用channels实现websocket的功能&#xff0c;之前就写了几篇博文了。随着在项目的使用和实际维护来说&#xff0c;重新设置了相关处理方法。 一般来说&#xff0c;前后端都只维护一个全局的连接&#xff0c;通过携带数据来判断具体的操作&#x…

京东协议算法最新版

环境准备 1 com.jingdong.app.mall11.6.4 入口定位 逆向分析&#xff0c;发现 params 里面有一个 sign 以及请求头里面有一个 jdgs 首先我们发现京东的 sign 是 32 位的&#xff0c;猜测其可能是 md5 之类的 hash 算法&#xff0c;既然是 hash 算法&#xff0c;那么就大概率…

程序员不得不知道的三大编程语言,看看你了解吗?

作为一名合格的程序员&#xff0c;不仅要有过硬的技术&#xff0c;还要了解许多基础知识。编程语言可是程序员工作的主力军&#xff0c;但是它是如何产生和发展的&#xff0c;你知道吗&#xff1f;接下来就让我们一起来看看编程语言和它们的发展吧&#xff01;记得点赞加收藏哦…

对 Webpack 的理解

结论先行&#xff1a; Webpack 是目前比较常用的模块打包工具&#xff0c;它能够管理和打包我们开发中所用到的 HTML、 CSS、JS 以及各种静态资源文件。 webpack内部做的事情呢&#xff0c;就是分析出各个模块之间的依赖关系&#xff0c;然后形成资源列表&#xff0c;最终打包…

FL Studio21.2.0.3842中文免费版和谐绿色版本下载

FL Studio21.2.0.3842中文免费版带有 stem 分离和 FL Cloud&#xff0c;这是一项专为 FL Studio 打造的具有里程碑意义的新服务。其他新功能包括 FL Studio Fruity Edition 的 Audio Clips&#xff08;音频剪辑&#xff09;和一个新的模拟建模合成器 Kepler。 为庆祝 FL Studio…

python类如何实例化对象

python类如何实例化对象 1、把类看作是定制的数据类型。既然是类型&#xff0c;只能用来表示数据的类型&#xff0c;不能直接用来保存数据。**要保存数据&#xff0c;首先需要创建一个类似于这类容器的东西&#xff0c;称为对象(或例子)。通过类别产生对象的过程称为例子。 2、…

Windows新建计划任务定时执行脚本

右键-此电脑&#xff0c;选择管理 点击 - 任务计划程序&#xff0c; 选择- 创建基本任务 输入任务描述&#xff0c;点击下一步 选择计划任务周期&#xff0c; 每天/每周等&#xff0c;点击下一步 选择每天任务执行时间&#xff0c;然后点击下一步&#xff0c; 选择启动程序&…

javaEE -15( 13000字 JavaScript入门 - 2)

一&#xff1a;JavaScript(WebAPI) JS 分成三个大的部分 ECMAScript: 基础语法部分DOM API: 操作页面结构BOM API: 操作浏览器 WebAPI 就包含了 DOM BOM&#xff0c;这个是 W3C 组织规定的. (和制定 ECMAScript 标准的大佬们不是一伙人). 前面学的 JS 基础语法主要学的是 …

百度智能云千帆大模型平台黑客马拉松报名开启!

比赛简介 创造是生成式 AI 的核心。无论是智能导购带来的线上购物体验升级&#xff0c;还是主图生成带来的素材生产效率提升&#xff0c;又或是游戏场景的快速设置、智能 NPC 的全新交互、数字广告的精准推荐和个性化定制&#xff0c;亦或者是为学生提供更符合真实的口语练习环…

《高性能MySQL-第三版》学习笔记一

第1章 MySQL架构与历史 1.1 MySQL逻辑架构 表现层&#xff1a;是应用程序的用户界面&#xff08;UI&#xff09;部分&#xff0c;大多数基于网络的客户端/服务器的工具或者服务都有类似的架构。比如连接处理、授权认证、安全等等。逻辑层&#xff1a;查询解析、分析、优化、缓…

王道p18 2.设计一个高效算法,将顺序表L的所有元素逆置,要求算法的空间复杂度为 O(1)。(c语言代码实现)

视频讲解在这&#xff08;支持一下吧&#xff0c;谢谢各位大佬&#xff09;&#xff1a;&#x1f447; c语言代码实现数据结构课后代码题顺序表p18 2_哔哩哔哩_bilibili 本题代码如下 void nizhi(struct sqlist* s) {int temp 0;for (int i 0; i < s->length / 2; i…

第三届iEnglish全国ETP大赛决赛即将启动

如今,寓教于乐的学习方式越来越受到家长和孩子的欢迎,“玩中学”成为一种既能培养兴趣又有助于孩子成长的学习趋势。 以“玩转英语,用iEnglish”为活动主题的第三届全国ETP大赛即将于本周五(11月3日)迎来总决赛的抽签仪式。据主办方iEnglish智能英语学习解决方案相关负责人称,…

如何卸载干净 IDEA(图文讲解)windows和Mac教程

大家好&#xff0c;我是sun~ 很多小伙伴会问 Windows / Mac 系统上要怎么彻底卸载 IDEA 呢&#xff1f; 本文通过图片文字&#xff0c;详细讲解具体步骤&#xff1a; 如何卸载干净 IDEA&#xff08;图文讲解&#xff09; Windows1、卸载 IDEA 程序2、注册表清理3、残留清理 M…

操作系统第四章-存储器管理

4.1 内存的基本知识 4.1.1 逻辑地址和物理地址 逻辑地址又称为相对地址 物理地址又称为绝对地址 一. 逻辑地址 内存中有多个进程,相对地址是相对于进程的起始地址而言的地址. 二.物理地址 绝对地址是在整个内存下的地址 4.2 程序的装入和链接 引入:用户程序要在系统中运…

什么是智慧燃气,智慧燃气解析干货!

关键词&#xff1a;智慧燃气、智慧燃气系统、智慧燃气平台、智能燃气、燃气智能管网、数据挖掘 在互联网技术、无线通信技术、物联网技术、卫星通信技术、大数据、云计算技术飞速发展的今天&#xff0c;业界提出了“智慧城市”的概念。智慧城市的范围很广&#xff0c;包含智慧…

Flask 网站装潢, 简易更换模板

Flask 网站装潢&#xff0c;简易更换模板 本博文找个好看的网页模板&#xff0c;并简单改一改变成flask模板&#xff0c;并展示 主博客目录&#xff1a;《从零开始学习搭建量化平台笔记》 文章目录 Flask 网站装潢&#xff0c;简易更换模板下载模板Python 自动生成目录修改目录…