Python高级函数2:使用itertools、functools、operator使得代码更高效、可读、可重用

2023-11-04

Python高级函数2:使用itertools、functools、operator使得代码更高效、可读、可重用

Python 是一种功能强大的编程语言,它提供了范围广泛的内置函数和模块,使编码更容易、更高效。上一篇博客介绍了map、reduce、filter、zip 和 enumerate ;这篇博客将介绍itertools.groupby()、functools.partial()、operator.attrgetter() 和 operator.itemgetter(),并通过实际示例介绍如何使用这些功能解决现实世界问题。这些函数非常强大和有用,可以大大提高你的编码能力,以及让代码更高效、可读、可重用。

Python 标准库中还有许多更强大的函数可用。作为 Python 开发人员,必须继续学习和探索这些功能以提高技能和能力。通过这种方式可以编写更好、更高效的代码,并解决更复杂的问题。 好的代码不仅涉及使用高级函数,还涉及编写干净、可读和文档齐全的代码,并遵循良好的编码实践。

itertools 模块提供了一个名为 groupby() 的函数,允许根据键函数对可迭代对象中的项目进行分组。此功能对于数据分析和操作任务非常有用。

functools 模块提供了一个名为 partial() 的函数,允许创建一个带有一些预填充参数的新函数。此函数对于创建可重用代码以及简化复杂函数调用非常有用。

operator 模块提供了两个函数,分别称为 attrgetter() 和 itemgetter(),允许轻松访问对象的属性或项目。这些函数对于根据对象的属性或项对对象列表进行排序非常有用。

1. 原理

itertools.groupby()

itertools 模块中的 groupby() 函数允许根据键函数对可迭代对象中的项目进行分组。这对于数据分析和操作任务非常有用。该函数有两个参数:一个可迭代对象和一个用于确定每个元素的键的函数。该函数返回一个生成对 (键, 组) 的迭代器,其中每个组都是具有相同键的元素序列。

functools.partial()

functools 模块中的 partial() 函数允许创建一个预填充了一些参数的新函数。这对于创建可重用的代码以及简化复杂的函数调用非常有用。该函数接受一个函数和任意数量的参数和关键字参数,并返回一个新的可调用对象,该对象在调用时,它将原始函数应用于给定的参数和关键字参数,以及传递给可调用对象的任何其他参数和关键字参数。

operator.attrgetter() 和 operator.itemgetter()

operator模块中的 attrgetter() 和 itemgetter() 函数分别允许轻松访问对象的属性或项。对于根据对象的属性或项目对对象列表进行排序非常有用。
attrgetter() 函数返回一个可调用对象,当调用时,它返回输入对象的给定属性的值。itemgetter() 函数返回一个可调用对象,当调用时,它返回输入对象的给定项的值。

2. 源码

# python高级函数2: itertools、functools、operator
# python python_high2.py

from itertools import groupby

words = ['apple', 'average', 'banana', 'cherry', 'date', 'elderberry', 'fig']

# itertools.groupby() 函数根据键函数对可迭代对象中的项目进行分组。这对于数据分析和操作任务非常有用。该函数有两个参数:一个可迭代对象和一个用于确定每个元素键的函数。该函数返回一个生成对(键、组)的迭代器,其中每个组都是具有相同键的元素序列。下面是如何使用它按第一个字母对单词列表进行分组的示例:
# 该函数按单词的第一个字母对单词进行分组,它首先对单词列表进行排序,然后将 key 函数应用于每个元素以确定作为单词第一个字母的键,然后迭代结果,对于每个键,它返回关联的元素组
for first_letter, group in groupby(sorted(words), key=lambda x: x[0]):
    print(first_letter, list(group))

# functools.partial() functools 模块中的 partial() 函数允许创建一个预填充了一些参数的新函数。这对于创建可重用的代码以及简化复杂的函数调用非常有用。该函数接受一个函数和任意数量的参数和关键字参数,并返回一个新的可调用对象,该对象在调用时,它将原始函数应用于给定的参数和关键字参数,以及传递给可调用对象的任何其他参数和关键字参数。下面是如何使用它创建一个将数字乘以 10 的新函数的示例:
from functools import partial


def multiply(x, y):
    return x * y


# 定义了一个函数乘法,它接受两个参数并返回它们的乘积。然后使用偏函数创建一个新的函数times_10,该函数等效于第一个参数固定为 10 的乘法函数。因此当调用 times_10(5) 时,它相当于调用返回 50 的 multiply(10,5)。
times_10 = partial(multiply, 10)

print(times_10(5))  # 50

# operator.attrgetter() 和 operator.itemgetter() 运算符模块中的 attrgetter() 和 itemgetter() 函数分别允许轻松访问对象的属性或项。对于根据对象的属性或项目对对象列表进行排序非常有用。
# attrgetter() 函数返回一个可调用对象,当调用时,它返回输入对象的给定属性的值。itemgetter() 函数返回一个可调用对象,当调用时,它返回输入对象的给定项的值。下面是如何使用 attrgetter() 按对象名称属性对对象列表进行排序的示例:
import operator


class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age


people = [Person('Bob', 30), Person('Charlie', 25), Person('Alice', 35)]

sorted_people = sorted(people, key=operator.attrgetter('name'))

for person in sorted_people:
    print(person.name)

data = [(1, 'a'), (3, 'b'), (2, 'c')]

# 根据第2个属性排序 使用 itemgetter() 函数来获取每个元组的第二项,并将其用作排序的键。
sorted_data = sorted(data, key=operator.itemgetter(1))

for item in sorted_data:
    print(item)

参考

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python高级函数2:使用itertools、functools、operator使得代码更高效、可读、可重用 的相关文章

随机推荐

  • H2数据库攻略之一-简介

    1 H2数据库介绍 常用的开源数据库 H2 Derby HSQLDB MySQL PostgreSQL 其中H2 HSQLDB类似 十分适合作为嵌入式数据库使用 其它的数据库大部分都需要安装独立的客户端和服务器端 H2的优势 1 h2采用纯
  • jQuery qTip2提示插件 (示例图,API)

    author YHC 首先介绍一下 主要的作用 用作网页中的提示 例如新手入门的导航 看下图你就明白了 当然这个插件在提示上功能非常丰富 下面主要介绍下载地址 以及入门的一个最小的 例子 qTip2官网下载地址 qTip2官网推荐下载地址
  • Android webView去除默认边框

    Android WebView无论怎么修改它的属性都会存在一定的边距 这是因为 HTML 的 body 标签默认存在一定边距 修改 webView 的属性并没有作用 解决办法 修改 html 代码 html data 原本需要加载的html
  • KaTeX

    KaTeX LaTeX数学公式编辑手册 只需要在第三列写法前后分别加上 就可以转换为符号 但需注意 CSDN的使用的是 KaTeX KaTeX KATE X数学公式 而不是 LaTeX LaTeX LATE X 两者会有些许区别 如果有
  • 漂亮的计算器页面 html,html+css实现一个好看的计算器实例代码

    最终效果如下图 2 有bug 就是整数后点击 号结果正确 如果小数后面点击 的话结果就错误 其他都正常 求指点 input的value是string类型的 在JS中改如何正确处理下图 1中的if部分 图 1 图 2 HTML代码如下 简单的
  • 【超全汇总】学习数据结构与算法,计算机基础知识,看这篇就够了

    由于文章有点多 并且发的文章也不是一个系列一个系列发的 不过我的文章大部分都是围绕着 数据结构 算法 计算机网络 操作系统 Linux 数据库 这几个方面发的 为了方便大家阅读 我整理了一波 不过公众号可以说是不支持修改文章 因为我决定每两
  • Java环境从删除到重装

    Java环境从删除到重装 前言 须知 如何完全删除jdk 安装jdk 前言 今天由于一些原因把Java环境删除了 怎么装都装不好 遇到了很多错误 在网上找了好多解决办法之后终于弄好了 所以写成一份Java环境从删除到重装 给各位不小心删除J
  • Centos7下基于jdk11 安装RocketMQ

    1 简介 RocketMQ是阿里巴巴中间件团队自研的一款高性能 高吞吐量 低延迟 高可用 高可靠 具备金融级稳定性 的分布式消息中间件 开源后并于2016年捐赠给Apache社区孵化 目前已经成为了 Apache顶级项目 当前在国内被广泛的
  • 用html+js实现代码背景墙特效【建议收藏】

    在csdn里面 有些博主的主页非常的帅 就是代码从上往下掉的特效 那么这种效果我们作为程序员该如何去写出来呢 不用担心 这篇博客就分享如何创建一个代码背景墙 1 效果展示 2 代码分享
  • java.io.FileNotFoundException: http://www.xxxxx.net:8080/test/test/ 403错误

    POST请求错误内容 java io FileNotFoundException http www xxxxx net 8080 test test at libcore net http HttpURLConnectionImpl get
  • python 中的六种“复制”方法

    以列表为例 方法一 直接变量赋值 将 li 赋值给变量 li1 打印他们的id会发现 他们的id是一样的 即是 li 和 li1 这两个变量在python中是同一个内存地址 对他们任何一个变量进行修改 另外一个会跟着变化 li 1 2 3
  • arm体系结构概述和编程模型

    1 arm体系结构的版本 1 arm1 6 2 arm体系的变种 1 T 系列 Thumb指令集 可以支持Thumb指令集 2 M系列 支持长乘法 32位 32位生成64位数据 长乘加指令 再加上32位数据 3 E系列 增强型DSP指令 增
  • 【Go语言(golang)教程】A Tour of Go 七十集大全

    http www aqee net go a tour of go 5 Go语言 golang 教程 A Tour of Go 1 Hello World Go语言 golang 教程 A Tour of Go 2 安装离线练习器 Go语言
  • 数字电子钟 1Hz 秒脉冲信号的设计

    数字电子钟 1Hz 秒脉冲信号的设计 摘 要 要设计数字钟 首先应选择一个能产生稳定的标准时间脉冲信号 而脉冲源产生的脉冲信号的频率较高 因此 需要进行分频 使高频脉冲信号变成适合于计时的低频脉冲信号 即 秒脉冲信号 频率1HZ 1引言 数
  • 找出看了5个电影以上的用户

    问题 在1亿条用户记录里 如何快速查询统计出看了5个电影以上的用户 解答 分以下几个步骤完成 1 建立 hash map lt 用户 电影数 gt 2 顺序扫描1亿条用户记录 1 如果 用户 在hash map中不存在 则新增并设 电影数
  • IT项目管理之第5章 项目时间管理习题之案例分析汇总

    IT项目管理之第5章 项目时间管理习题之案例分析汇总 项目时间管理习题之案例分析汇总 案例1 案例分析 案例1参考答案 案例2 案例2分析 案例2参考答案 叮嘟 这里是小啊呜的学习课程资料整理 好记性不如烂笔头 今天也是努力进步的一天 一起
  • DevopsCamp 第 2 期作业: 《cobra - 05 Go 项目的目录结构》

    DevopsCamp 第 2 期作业 cobra 05 Go 项目的目录结构 原文链接 https typonotes com posts 2023 02 13 devopscamp cobra 05 layout Go 项目的目录结构 G
  • windows server 2016搭建AD域

    此实验以windows sever 2016为例 安装windows server 2016 操作省略 一台服务器想要安装成AD DC 活动目录域服务 必须具备以下条件 安装者必须具有本地管理员权限 DNS基础结构的支持 可以在安装AD D
  • 电脑开机出现黑屏,出现“windows 未能启动,原因可能更改了硬件或者软件,解决此类问题的步骤”

    出现问题的界面如下 解决此类问题的步骤如下 1 直接按 enter 回车键 2 出现以下界面 我自己的是windows 10系统哈 因为当时没保存自己的照片 只能拿这个顶替一下 但是步骤是一样的 3 然后按提示按F8 正常来说时会出现以下的
  • Python高级函数2:使用itertools、functools、operator使得代码更高效、可读、可重用

    Python高级函数2 使用itertools functools operator使得代码更高效 可读 可重用 1 原理 itertools groupby functools partial operator attrgetter 和