news 2026/10/23 1:01:02

【python】python module使用之----operator

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【python】python module使用之----operator

1.operator
我这里主要可能介绍的是python3.X版本的,会和python2.X版本有点不一致,具体的细节很多,小伙伴们遇到问题还请自行百度吧,LZ也没有足够的能力能够涵盖到所有的问题,只能把我自己遇到的一些问题分享出来,避免小伙伴们再走一遍弯路!

#coding:utf-8fromoperatorimport*#逻辑操作符(operator的一些操作函数与原本的运算是相同的)a=[1,2,3]b=aprint('a =',a)print('b =',b)printprint('not_(a):',not_(a))print('truth(a):',truth(a))print('is_(a, b):',is_(a,b))print('is_not(a,b):',is_not(a,b))#比较操作符(这些函数等价于<、<=、==、>=和>的表达式语法)a=3b=5print('a =',a)print('b =',b)printforfuncin(lt,le,eq,ne,ge,gt):print('{0}(a, b):'.format(func.__name__),func(a,b))#算术操作符(abs返回值得绝对值,neg返回(-obj), pos返回(+obj))a,b,c,d=-1,2,-3,4print('a =',a)print('b =',b)print('c =',c)print('d =',d)print('\nPositive/Negative:')print('abs(a):',neg(a))print('neg(b):',neg(b))print('pos(a):',pos(a))print('pos(b):',pos(b))#mod表示取模, mul 表示相乘,pow是次方, sub表示相减a=-2b=5.0print('a =',a)print('b =',b)print('\nArithmetic')print('add(a, b):',add(a,b))print('div(a, b):',divmod(a,b))print('floordiv(a, b):',floordiv(a,b))print('mod(a, b):',mod(a,b))print('mul(a, b):',mul(a,b))print('pow(a, b):',pow(a,b))print('sub(a, b):',sub(a,b))print('truediv(a, b):',truediv(a,b))#and 表示按位与, invert 表示取反操作, lshift表示左位移, or表示按位或, rshift表示右位移,xor表示按位异或。a=2b=6print('a =',a)print('b =',b)print('\nBitwise:')print('and_(a, b):',and_(a,b))print('invert(a):',invert(a))print('lshift(a, b) :',lshift(a,b))print('or_(a, b):',or_(a,b))print('rshift(a, b):',rshift(a,b))print('xor(a, b):',xor(a,b))#原地操作符#即in-place操作, x += y 等同于 x = iadd(x, y), 如果复制给其他变量比如z = iadd(x, y)等同与z = x; z += ya=3b=4c=[1,2]d=['a','b']print('a =',a)print('b =',b)print('c =',c)print('d =',d)printa=iadd(a,b)print('a = iadd(a, b) =>',a)printc=iconcat(c,d)print('c = iconcat(c, d) =>',c)#属性和元素的获取方法#operator模块最特别的特性之一就是获取方法的概念,获取方法是运行时构造的一些可回调对象,用来获取对象的属性或序列的内容,获取方法在处理迭代器或生成器序列的时候特别有用,它们引入的开销会大大降低lambda或Python函数的开销fromoperatorimport*classMyObj(object):def__init__(self,arg):super(MyObj,self).__init__()self.arg=argdef__repr__(self):return'MyObj(%s)'%self.arg objs=[MyObj(i)foriinrange(5)]print("Object:",objs)g=attrgetter("arg")vals=[g(i)foriinobjs]print("arg values:",vals)objs.reverse()print("reversed:",objs)print("sorted:",sorted(objs,key=g))#属性获取方法类似于:lambda x, n='attrname':getattr(x,nz)fromoperatorimport*l=[dict(val=-1*i)foriinrange(4)]print("dictionaries:",l)g=itemgetter("val")vals=[g(i)foriinl]print("values: ",vals)print("sorted:",sorted(l,key=g))l=[(i,i*-2)foriinrange(4)]print("tuples: ",l)g=itemgetter(1)vals=[g(i)foriinl]print("values:",vals)print("sorted:",sorted(l,key=g))#结合操作符和定制类#operator模块中的函数通过相应操作的标准Python接口完成工作,所以它们不仅适用于内置类型,还适用于用户自定义类型fromoperatorimport*classMyObj(object):def__init__(self,val):super(MyObj,self).__init__()self.val=valreturndef__str__(self):return"MyObj(%s)"%self.valdef__lt__(self,other):returnself.val<other.valdef__add__(self,other):returnMyObj(self.val+other.val)a=MyObj(1)b=MyObj(2)print(lt(a,b))print(add(a,b))#类型检查#operator 模块还包含一些函数用来测试映射、数字和序列类型的API兼容性#python2.7支持,python3.5不支持# from operator import *# class NoType(object):# pass# class MultiType(object):# def __len__(self):# return 0# def __getitem__(self, name):# return "mapping"# def __int__(self):# return 0# o = NoType()# t = MultiType()# for func in [isMappingType, isNumberType, isSequenceType]:# print ("%s(o):" % func.__name__, func(o))# print ("%s(t):" % func.__name__, func(t))#获取对象方法#使用methodcaller可以获取对象的方法fromoperatorimportmethodcallerclassStudent(object):def__init__(self,name):self.name=namedefgetName(self):returnself.name stu=Student("Jim")func=methodcaller('getName')print(func(stu))#输出Jim

放出部分运行的截图,因为print函数使用的比较多,所以打印出来的内容比较多,可以注释掉部分或者对着源代码自己看一下。。。

这里举得例子都是比较简单基础的啦O(∩_∩)O

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/22 23:59:28

FreeRTOS任务通知实战详解:内核原理、API与避坑指南

裸机编程切到RTOS之后&#xff0c;任务之间的通信和同步永远是躲不开的坎。前面聊过队列、信号量、互斥锁、事件组&#xff0c;这次把FreeRTOS任务通知&#xff08;Task Notification&#xff09;单独拎出来讲透。原因很简单&#xff1a;任务通知是FreeRTOS里最容易用错、也最容…

作者头像 李华
网站建设 2026/10/22 23:56:45

从极简命名到工程落地:拆解小模块设计哲学与实操要点

1. 从“rea”这个标题说起&#xff1a;一个极简词背后的项目拆解思路 “rea”这三个字母&#xff0c;第一次看到的时候&#xff0c;我脑子里蹦出来的第一反应是——这大概率是个缩写&#xff0c;而且是一个被压缩到极致的缩写。在技术圈里混久了你会发现&#xff0c;越是短的项…

作者头像 李华
网站建设 2026/10/22 23:56:38

jinfo命令详解:JVM运行中参数查看与动态修改实战

提到 JVM 排查工具&#xff0c;大家随口就是 jstat、jstack、jmap&#xff0c;jinfo 反而常常被忽略。它属于 JDK 自带的诊断命令&#xff0c;核心能力正好是标题里这九个字&#xff1a;实时查看和修改 JVM 配置参数&#xff0c;也就是你可以不重启、不停机&#xff0c;对一个正…

作者头像 李华
网站建设 2026/10/22 23:55:34

从零到2万Star:AI编程开源教程的定位、设计与增长复盘

这个教程做到 2 万 Star&#xff0c;说实话比我预期来得早。最近更意外的是&#xff0c;它竟然出现在豆包的推荐里&#xff0c;不少读者是顺着 AI 助手的回答摸到项目页的。我先交代一下这是个什么东西&#xff1a;它不是一套讲理论的书&#xff0c;也不是单纯的代码仓库&#…

作者头像 李华
网站建设 2026/10/22 23:52:53

Hermes Agent入门:从安装配置到跑通最小智能体实例

说起Agent开发&#xff0c;我一开始也是从“给大模型套一层函数调用”开始的。写过一段时间后你会发现&#xff0c;真正花时间的根本不是模型回答得好不好&#xff0c;而是围绕模型那一圈“脏活”&#xff1a;参数校验、工具注册、上下文裁剪、循环控制、日志追踪&#xff0c;每…

作者头像 李华
网站建设 2026/10/22 23:47:25

高斯滤波与双边滤波:原理、参数调优与机器视觉实战解析

这些年我接触过不少机器视觉相关的实际项目&#xff0c;从工业零件的表面缺陷检测到显微图像的预处理&#xff0c;几乎每一步都绕不开图像滤波去噪这个环节。而高斯滤波和双边滤波&#xff0c;又是这个环节里最基础、也最容易被混淆的两个算子。很多初学者拿起 OpenCV 就调cv2.…

作者头像 李华