Python operator模块这么用,效率杠杠的!

news2024/11/25 4:57:29

目录

1、基础操作符应用 🐍

1.1 加载operator模块

1.2 使用itemgetter进行排序

1.3 attrgetter与方法调用

2、高级功能探索 🔍

2.1 methodcaller的妙用

2.2 操作符重载与定制

3、结合lambda表达式 ✨

3.1 lambda与operator模块协同工作

3.2 实战案例分析

4、结合functools.partial定制函数 🛠️

4.1 functools.partial用法

4.2 与operator模块的完美搭配

5、利用operator实现数学运算 ✏️

5.1 常见数学运算符

5.2 运算符重载实例

6、比较操作符的应用 📏

6.1 比较操作符一览

6.2 多对象比较示例

7、总结与拓展 🚀



1、基础操作符应用 🐍

1.1 加载operator模块

在Python中,operator模块提供了对标准操作符函数的访问,使得这些操作符可以作为函数来使用。要开始使用operator模块,首先需要通过import语句将其引入到你的程序中。下面是一个简单的例子 ,展示了如何加载并使用add函数进行两个数的加法运算。

import operator

# 使用operator.add执行加法
result = operator.add(5, 3)
print(result)  # 输出: 8

1.2 使用itemgetter进行排序

itemgetter函数是operator模块中一个非常实用的工具,它用于获取对象的某个字段或属性作为排序的关键依据。这在处理列表排序时特别有用,尤其是当你需要根据对象的多个属性进行排序时。以下是一个应用itemgetter对列表按指定属性排序的例子:

from operator import itemgetter

data = [('Alice', 25), ('Bob', 22), ('Charlie', 30)]
# 按照年龄排序
sorted_data = sorted(data, key=itemgetter(1))
print(sorted_data)  
# 输出: [('Bob', 22), ('Alice', 25), ('Charlie', 30)]

1.3 attrgetter与方法调用

itemgetter类似 ,attrgetter允许你根据对象的属性进行排序或访问。这对于自定义类的对象排序尤其有效。此外,attrgetter还能调用无参数的方法。下面的例子展示了如何使用attrgetter来根据对象的属性进行排序以及调用方法:

class Person:
def__init__(self, name, age):
        self.name = name
        self.age = age

defget_age(self):
return self.age

p1 =Person('Tom',32)
p2 =Person('Jerry',28)

people =[p1, p2]

from operator import attrgetter

# 按照age属性排序
sorted_people =sorted(people, key=attrgetter('age'))
print([person.name for person in sorted_people])
# 输出: ['Jerry', 'Tom']

# 调用get_age方法进行排序
sorted_by_age_method =sorted(people, key=attrgetter('get_age'))
print([person.name for person in sorted_by_age_method])
# 输出: ['Jerry', 'Tom']

通过以上三个部分的介绍 ,我们深入探讨了operator模块的基础应用,从简单地加载模块到利用itemgetterattrgetter进行复杂的数据排序和属性访问。掌握这些技巧 ,能让你在处理数据时更加高效灵活。

2、高级功能探索 🔍

2.1 methodcaller的妙用

methodcaller函数是operator模块中的另一个强大工具,它允许你调用对象的方法,同时传递给该方法所需的参数。这对于在列表推导式、map()函数或者filter()函数中调用对象的方法尤其有用,因为你无需实例化对象即可直接调用其方法。下面的例子展示如何使用methodcaller

class Circle:
def__init__(self, radius):
        self.radius = radius

defarea(self):
return3.14*(self.radius **2)

# 创建Circle对象列表
circles =[Circle(5),Circle(3),Circle(7)]

from operator import methodcaller

# 使用methodcaller计算每个圆的面积
areas =list(map(methodcaller('area'), circles))
print(areas)  # 输出: [78.5, 28.26, 153.86]

2.2 操作符重载与定制

Python的灵活性允许你在自定义类中重载操作符,从而实现对这些操作符的定制使用。通过定义特定的魔术方法(如__add____sub____mul__等),你可以控制当使用这些操作符时的行为。这不仅增强了代码的可读性,也使你的类能够更自然地融入Python的语法结构中。以下是一个简单的例子,演示了如何在自定义类中重载加法操作符:

class Vector:
def__init__(self, x, y):
        self.x = x
        self.y = y

def__add__(self, other):
returnVector(self.x + other.x, self.y + other.y)

# 创建Vector对象
v1 =Vector(1,2)
v2

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

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

相关文章

面试-javaIO机制

1.BIO BIO:是传统的javaIO以及部分java.net下部分接口和类。例如,socket,http等,因为网络通信同样是IO行为。传统IO基于字节流和字符流进行操作。提供了我们最熟悉的IO功能,譬如基于字节流的InputStream 和OutputStream.基于字符流…

DataWhale-吃瓜教程学习笔记 (五)

学习视频:第4章-决策树_哔哩哔哩_bilibili 西瓜书对应章节: 第四章 4.1;4.2 决策树算法原理 - 逻辑角度 if...else.. 语句的组合,不断的选择 - 几何角度 根据某种准则划分特征空间 最终目的:提高分类样本的纯度 I…

Qt开发笔记:Qt3D三维开发笔记(一):Qt3D三维开发基础概念介绍

若该文为原创文章,转载请注明原文出处 本文章博客地址:https://blog.csdn.net/qq21497936/article/details/140059315 长沙红胖子Qt(长沙创微智科)博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、O…

java第二十九课 —— 断点 | 零钱通项目

断点调试(debug) 实际需求 在开发中,新手程序员在查找错误时,这时老程序员就会温馨提示,可以用断点调试步一步的看源码执行的过程,从而发现错误所在。 重要提示:在断点调试过程中,…

如何安装和卸载软件?

如何安装和卸载软件? 💻 如何安装和卸载软件?——默语的详细教程摘要引言正文内容🖥️ 在Windows上安装和卸载软件安装软件卸载软件 🍏 在Mac上安装和卸载软件安装软件卸载软件 🤔 QA环节📝 表格…

【nvm】如何使用nvm优雅的管理Node.js

希望文章能给到你启发和灵感~ 如果觉得文章对你有帮助的话,点赞 关注 收藏 支持一下博主吧~ 阅读指南 开篇说明一、基础环境说明1.1 硬件环境1.2 软件环境 二、什么是nvm?2.1 概念2.1 安装2.1.1 对于Mac系统2.1.2 对于Windows系统2.1.3 对于…

完全离线的本地问答模型LocalGPT如何实现无公网IP远程连接提问

文章目录 前言环境准备1. localGPT部署2. 启动和使用3. 安装cpolar 内网穿透4. 创建公网地址5. 公网地址访问6. 固定公网地址 前言 本文主要介绍如何本地部署LocalGPT并实现远程访问,由于localGPT只能通过本地局域网IP地址端口号的形式访问,实现远程访问…

基于OrangePi AIpro + owncloud 5分钟搭建一个私有网盘

OrangePi AIpro自带镜像系统已预装了docker,这里我们直接基于docker安装owncloud。 准备 切换用户: HwHiAiUser 默认密码:Mind123 su HwHiAiUser 创建文件夹 sudo mkdir /home/SummerGao/owncloud-docker-server 切换至刚创建的文件夹下…

使用 Compose Multiplatform Media Player 实现跨平台媒体播放

使用 Compose Multiplatform Media Player 实现跨平台媒体播放 在跨平台开发中,媒体播放功能是一个常见且重要的需求。Compose Multiplatform Media Player 是一个专为 Compose Multiplatform 项目设计的强大媒体播放器库,它可以在 iOS 和 Android 平台上无缝实现视频播放、…

Prism 目录方式加载插件,提示`xxx.resources.dll`找不到

问题场景 前置条件 使用Prism 实现的目录配置方式加载插件; 有两个模块插件:ModuleA 以及 MouduleB。 问题现象 独立项目作为插件被加载时,加载指定模块中的用户控件,程序能正常运行,点击模块进行加载。 但输出窗…

cartographer从入门到精通(一):cartographer介绍

一、cartographer重要文档 有关cartographer的资料有2个比较重要的网站,我们的介绍也是基于这两个网站,其中会加入自己的一些理解,后续也有一些对代码的修改,来实现我们想完善的功能。 1-Cartographer 2-Cartographer ROS 第1个…

Python 面试【★★★★★】

欢迎莅临我的博客 💝💝💝,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

STM32第九课:DHT11温湿度传感器

文章目录 需求一、DHT11温湿度传感器二、模块配置流程1.配置时钟和IO2.读取数据3.数据处理 三、导入语音模块四、关键代码总结 需求 1.完成DHT11温湿度检测模块的配置。 2.处理DHT11获取的数据,在串口打印处理后的实时数据。 2.通过Su-03t语音识别模块实现实时温湿…

WLAN 4-Way Handshake如何生成GTK?

关于Wi-Fi的加密认证过程,可以参考如下链接,今天我们来理解如何生成GTK。 WLAN数据加密机制_tls加密wifi-CSDN博客 1 GTK GTK(Group Temporal Key)是由AP通过GMK生成,长度为128位,并在四次握手的第三步中…

哈尔滨高校大学智能制造实验室数字孪生可视化系统平台项目的验收

哈尔滨高校大学智能制造实验室数字孪生可视化系统平台项目的验收,标志着这一技术在教育领域的应用取得了新的突破。项目旨在开发一个数字孪生可视化系统平台,用于哈尔滨高校大学智能制造实验室的设备模拟、监测与数据分析。项目的主要目标包括&#xff1…

数据结构_线性表

线性表的定义和特点 线性表是具有相同特性的数据元素的一个有限序列 :线性起点/起始节点 :的直接前驱 :的直接后继 :线性终点/终端节点 n:元素总个数,表长 下标:是元素的序号,表示元素在表中的位置 n0时称为空表 线性表 由n(n>0)个数据元素(结点),组成的有限序列 将…

Quantlab5.0:一切围绕可实盘策略驱动开发

原创文章第573篇,专注“AI量化投资、世界运行的规律、个人成长与财富自由"。 2024年上半年即将结束,开始准备星球下半年的工作。 目前设想的——Quantlab5.0,之所以升级一个大版本,与4.x有很大不同。 5.0专注策略开发&…

负载均衡器有什么用?

负载均衡器有什么用? 负载均衡器是一种在多个服务器之间分配网络或应用程序流量的设备或软件应用程序。其主要目的是确保没有一台服务器承担过多的需求,从而提高应用程序的响应速度和可用性。 在计算机发展的早期,负载均衡是一个手动过程。…

【Sublime】Sublime Text 中运行终端

Sublime Text 本身并不是一个终端仿真器,可以使用插件来在 Sublime Text 中集成终端功能。最常用的插件之一是“Terminal”。 使用“Terminal”插件在 Sublime Text 中启动终端 以下是安装和使用该插件的步骤: 安装 Package Control: 如果你…

【自动驾驶汽车通讯协议】深入理解PCI Express(PCIe)技术

文章目录 0. 前言1. PCIe简介1.1 PCIe外观1.2 PCIe的技术迭代 2. PCIe的通道(lane)配置2.1 通道配置详解2.2 通道配置的影响 3. PCIe的架构3.1 架构层次3.2 核心组件 4. PCIe的特性5. PCIe在自动驾驶中的应用 0. 前言 按照国际惯例,首先声明&…