python module使用之----operator

来源:互联网 发布:淘宝买装饰画 编辑:程序博客网 时间:2024/09/21 09:28

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

#coding:utf-8from operator import *#逻辑操作符(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)printfor func in (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函数的开销from operator import *class MyObj(object):    def __init__(self, arg):        super(MyObj, self).__init__()        self.arg = arg    def __repr__(self):        return 'MyObj(%s)' % self.argobjs = [MyObj(i) for i in range(5)]print ("Object:", objs)g = attrgetter("arg")vals = [g(i) for i in objs]print ("arg values:", vals)objs.reverse()print ("reversed:", objs)print ("sorted:", sorted(objs, key=g))#属性获取方法类似于:lambda x, n='attrname':getattr(x,nz)from operator import *l = [dict(val=-1*i) for i in range(4)]print ("dictionaries:", l)g = itemgetter("val")vals = [g(i) for i in l]print ("values: ", vals)print ("sorted:", sorted(l, key=g))l = [(i,i*-2) for i in range(4)]print ("tuples: ", l) g = itemgetter(1)vals = [g(i) for i in l]print ("values:", vals)print ("sorted:", sorted(l, key=g))#结合操作符和定制类#operator模块中的函数通过相应操作的标准Python接口完成工作,所以它们不仅适用于内置类型,还适用于用户自定义类型from operator import *class MyObj(object):    def __init__(self, val):        super(MyObj, self).__init__()        self.val = val        return    def __str__(self):        return "MyObj(%s)" % self.val    def __lt__(self, other):        return self.val < other.val    def __add__(self, other):        return MyObj(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可以获取对象的方法from operator import methodcallerclass Student(object):    def __init__(self, name):        self.name = name    def getName(self):        return self.namestu = Student("Jim")func = methodcaller('getName')print (func(stu))   #输出Jim

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

这里写图片这里写图描述

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

0 0
原创粉丝点击