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

这篇具有很好参考价值的文章主要介绍了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() 函数返回一个可调用对象,当调用时,它返回输入对象的给定项的值。文章来源地址https://www.toymoban.com/news/detail-429652.html

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)

参考

  • https://medium.com/@etirismagazine/advanced-puthon-functions-part-two-c0a026a3d7da

到了这里,关于Python高级函数2:使用itertools、functools、operator使得代码更高效、可读、可重用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C++ operator关键字的使用(重载运算符、仿函数、类型转换操作符)

    C++ operator的使用(重载运算符、仿函数、类型转换操作符) C++11实用技术(一)auto与decltype的使用 C++11实用技术(二)std::function和bind绑定器 C++11实用技术(三)std::future、std::promise、std::packaged_task、async C++11 中,operator 是一个,用于重载运算符。通过重载运算符

    2024年02月14日
    浏览(45)
  • Python高级编程之旅2:高级函数

    欢迎来到《Python高级编程之旅》系列的第二篇博客!在上一篇中,我们介绍了面向对象编程的概念和优势。今天,我们将继续探索Python中的高级编程技术,重点是高级函数。高级函数是Python中非常强大和灵活的概念,可以帮助我们编写更简洁、可读性更高的代码。让我们一起

    2024年01月19日
    浏览(41)
  • Python笔记2(函数参数、面向对象、装饰器、高级函数、捕获异常、dir)

    Python笔记1(赋值、浅拷贝和深拷贝、字符串日期转换、argparse、sys、overwrite、eval、json.dumps/json.loads、os.system(cmd)、zfill、endswith、open) 参数定义 在python中定义函数的时候,函数名后面的括号里就是用来定义参数的,如果有多个参数的话,那么参数之间直接用逗号, 隔开。 定义

    2024年02月08日
    浏览(50)
  • 【Hive 01】简介、安装部署、高级函数使用

    Hive是建立在 Hadoop上的数据仓库基础构架,它提供了一系列的工具,可以进行数据提取、转化、加载( ETL ) Hive定义了简单的类SQL查询语言,称为HQL,它允许熟悉SQL的用户直接查询Hadoop中的数据 Hive包含SQL解析引擎,它会将SQL语句转译成MR Job,然后在Hadoop中执行 Hive的数据存储

    2024年02月16日
    浏览(33)
  • Postgresql的高级聚合函数使用实例(超详细)

    PostgreSQL是一种开源的强大SQL数据库管理系统,它提供了丰富的聚合函数来进行数据分析和计算。高级聚合函数是PostgreSQL中一类非常强大的聚合函数,可以通过自定义的方式进行一些高级的数据计算,例如按照给定的索引或条件计算平均值、累加值或者其他的复杂的汇总值。

    2024年02月09日
    浏览(45)
  • C++回调函数精解:基础使用和高级技巧一网打尽

      概述: C++回调函数提供了灵活的编程方式。基础使用演示了如何定义和调用简单的回调,而高级使用则展示了返回值非 `void` 的回调和Lambda表达式的灵活性。这种机制使程序更模块化、可维护。 在C++中,回调函数可以用于实现基础和高级的功能。以下是一个包含基础和高级

    2024年03月18日
    浏览(53)
  • 《Python数据分析技术栈》第06章使用 Pandas 准备数据 11 pandas中的运算符 Operators in Pandas

    《Python数据分析技术栈》第06章使用 Pandas 准备数据 11 pandas中的运算符 Operators in Pandas Pandas uses the following operators that can be applied to a whole series. While Python would require a loop to iterate through every element in a list or dictionary, Pandas takes advantage of the feature of vectorization implemented in NumPy that

    2024年01月23日
    浏览(49)
  • Day1使用Burpsuite抓包工具抓包,改变UA头使得手机和pc端界面互相转换

    1.前期工作:安装Burpsuite工具这里网上有许多教程,大致步骤如下: 找到安装包然后解压缩,然后双击 安装jdk,然后就是配置环境变量,如果是默认jdk安装路径没有更改路径的话就是跟如下一样 配置如下: (1)JAVA_HOME 变量值填写JAVA安装的路径,我的是C:Program FilesJavajd

    2024年02月10日
    浏览(40)
  • 【100天精通Python】Day59:Python 数据分析_Pandas高级功能-多层索引创建访问切片和重塑操作,pandas自定义函数和映射功能

    目录 1 多层索引(MultiIndex) 1.1 创建多层索引 1.1.1 从元组创建多层索引

    2024年02月09日
    浏览(67)
  • Python高级用法:使用unittest进行单元测试

    Python中含有一个单元测试模块unittest,我们可以使用其中的工具来测试代码。在编写测试用例后,可以查看一系列输入是否得到了预期的输出。单元测试专注于测试软件单元,软件单元可以被理解为应用程序代码的最小可测试部分。 在代码中我们需要测试的是一个数字是否为

    2024年01月19日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包