喵喵喵。。。
本文翻译自:https://docs.python.org/2.7/library/operator.html 如有错误之处,欢迎大家指出!
Operator模块提供了一系列与Python自带操作一样有效的函数。例如:operator.add(x, y)和表达式x+y是等效的。那些特殊类的方法都有自己的函数名;为了方便起见,一些函数名是没有前导和后置(__)。 在接下来讨论的函数涉及对象比较,逻辑运算,数学运算,队列操作和抽象类型测试。对象比较函数对所有对象都适用,并且都以他们所支持的丰富的比较操作而命名。
operator.lt(a, b) #等价于a<b
operator.le(a, b) #等价于a<=b
operator.eq(a, b) #等价于a==b
operator.ne(a, b) <span style="font-family: Arial, Helvetica, sans-serif;">#等价于a!=b</span>
operator.ge(a, b)<span style="white-space:pre"> </span> #等价于a>=b
operator.gt(a, b)<span style="white-space:pre"> </span> #等价于a>b
operator.__lt__(a, b)
operator.__le__(a, b)
operator.__eq__(a, b)
operator.__ne__(a, b)
operator.__ge__(a, b)
operator.__gt__(a, b)
丰富的比较操作(rich comparison) 注意:不同于内建的cmp()函数,以上这些函数可以返回任何类型,也就是说,返回值可以是也可以不是布尔值。点击 Comparison 来查看更多关于rich comparison
在Python 2.2 以上版本可用。
逻辑操作一般来说也可以应用在所有的,不同类型的值(value)上, 同时支持真值检验, 等式检验, 布尔操作:
operator.not_(obj)¶
operator.__not__(obj)¶
返回 not obj的结果. (注意现在没有__not__()这个对于对象的方法; 只有解释器核心定义了这个方法。 结果受到__nonzero__()和__len__()这两个方法影响)
operator.truth(obj)¶
返回 True 如果对象是真的, 否则返回False. 这和使用bool 构造器是一样的.
operator.is_(a, b)¶
返回 ais b的结果. 检验对象是否相等.
operator.is_not(a, b)¶
返回 ais not b的结果. 检验对象是否相等.
在Python2.3以上版本出现.
大量数学操作和按位运算:
operator.abs(obj)¶
operator.__abs__(obj)¶
返回对象的绝对值.
operator.add(a, b)¶
operator.__add__(a, b)¶
返回 a+ b, (a,b为数字).
operator.and_(a, b)¶
operator.__and__(a, b)¶
返回 a&b(位运算).
operator.div(a, b)¶
operator.__div__(a, b)¶
返回 a/ b (当没有使用 __future__.division.时) 经典除法.
operator.floordiv(a, b)¶
operator.__floordiv__(a, b)¶
返回 a// b.
在python2.2以上版本出现
operator.index(a)¶
operator.__index__(a)¶
返回 a的下表. 等同于 a.__index__().
在python2.5以上版本出现
operator.inv(obj)¶
operator.invert(obj)¶
operator.__inv__(obj)¶
operator.__invert__(obj)¶
返回对 obj对象按位取反的值. 等同于 ~obj.
在python2.0以上版本出现: 更名为invert() 和__invert__().
operator.lshift(a, b)¶
operator.__lshift__(a, b)¶
返回a左移b的值.
operator.mod(a, b)¶
operator.__mod__(a, b)¶
返回 a% b的值.
operator.mul(a, b)¶
operator.__mul__(a, b)¶
返回 a* b, (a,b为数字).
operator.neg(obj)¶
operator.__neg__(obj)¶
返回 obj 对象的相反数(-obj).
operator.or_(a, b)¶
operator.__or__(a, b)¶
返回 a | b.
operator.pos(obj)¶
operator.__pos__(obj)¶
返回obj对的正数 (+obj).
operator.pow(a, b)¶
operator.__pow__(a, b)¶
返回 a** b(乘方), (a,b为数字).
在python2.3版本出现
operator.rshift(a, b)¶
operator.__rshift__(a, b)¶
返回a右移b的值.
operator.sub(a, b)¶
operator.__sub__(a, b)¶
返回 a– b的值.
operator.truediv(a, b)¶
operator.__truediv__(a, b)¶
返回 a/ b (当启用__future__.division 时. )这也被称为正除法
在python2.2版本以上出现.
operator.xor(a, b)¶
operator.__xor__(a, b)¶
返回按位操作 ~(a & b)
队列操作 (其中一些包含 mapping) 包括:
operator.concat(a, b)¶
operator.__concat__(a, b)¶
返回 a+ b (a 和 b 都是sequences).
operator.contains(a, b)¶
operator.__contains__(a, b)¶
返回 bin a操作的结果. 注意反向操作数.
在python2.0版本出现: 更名为 __contains__().
operator.countOf(a, b)¶
返回b在a中出现的次数.
operator.delitem(a, b)¶
operator.__delitem__(a, b)¶
删除在a中下标为b的值.
operator.delslice(a, b, c)¶
operator.__delslice__(a, b, c)¶
在a中删除下标b到c-1的值.
从2.6版本删除: 这个函数在Python 3.x被移去. 使用delitem()
operator.getitem(a, b)¶
operator.__getitem__(a, b)¶
返回a中下标为b的值.
operator.getslice(a, b, c)¶
operator.__getslice__(a, b, c)¶
返回a中从下标b到c-1的一个片段
从2.6版本开始不再支持: 在Python 3.x中被移去. 使用getitem()
operator.indexOf(a, b)¶
返回a中b第一次出现的下表.
operator.repeat(a, b)¶
operator.__repeat__(a, b)¶
从2.7版本开始不再支持: 使用 __mul__()作为替代.
返回 a* b, (a 是一个队列 , b 是整数.)
operator.sequenceIncludes(...)¶
从2.0版本开始不再支持:使用 contains() 作为替代.
operator.setitem(a, b, c)¶
operator.__setitem__(a, b, c)¶
把a中下标为b的值改成c
operator.setslice(a, b, c, v)¶
operator.__setslice__(a, b, c, v)¶
把a中从下表b到c-1的片段改成队列v
从2.6版本开始不再支持: 在 Python 3.x中被移除. 使用setitem() 加上片段下标.
使用实例
>>>
>>> # Elementwise multiplication
>>> map(mul, [0, 1, 2, 3], [10, 20, 30, 40])
[0, 20, 60, 120]
>>> # Dot product
>>> sum(map(mul, [0, 1, 2, 3], [10, 20, 30, 40]))
200
许多操作都有一个替代版本. 以下函数 提供了一个比通常表达式更原始的替代操作方法。比如, x += y 等同于 x = operator.iadd(x, y). 另一种操作方法是 z = operator.iadd(x, y) 等同于组合表达式 z = x; z += y.
operator.iadd(a, b)¶
operator.__iadd__(a, b)¶
a = iadd(a, b) 等同于 a += b.
在2.5以上版本出现
operator.iand(a, b)¶
operator.__iand__(a, b)¶
a = iand(a, b) 等同于 a &= b.
在 2.5以上版本出现.
operator.iconcat(a, b)¶
operator.__iconcat__(a, b)¶
a = iconcat(a, b) 等同于 a += b ( a 和b 都是sequences).
在 2.5以上版本出现.
operator.idiv(a, b)¶
operator.__idiv__(a, b)¶
a = idiv(a, b) 等同于o a /= b (当未使用 __future__.division.时)
在 2.5以上版本出现.
operator.ifloordiv(a, b)¶
operator.__ifloordiv__(a, b)¶
a = ifloordiv(a, b) 等同于 a //= b.
在 2.5以上版本出现.
operator.ilshift(a, b)¶
operator.__ilshift__(a, b)¶
a = ilshift(a, b) 等同于 a <<= b.
在 2.5以上版本出现.
operator.imod(a, b)¶
operator.__imod__(a, b)¶
a = imod(a, b) 等同于 a %= b.
在 2.5以上版本出现.
operator.imul(a, b)¶
operator.__imul__(a, b)¶
a = imul(a, b) 等同于 a *= b.
在 2.5以上版本出现.
operator.ior(a, b)¶
operator.__ior__(a, b)¶
a = ior(a, b) 等同于 a |= b.
在 2.5以上版本出现.
operator.ipow(a, b)¶
operator.__ipow__(a, b)¶
a = ipow(a, b) 等同于 a **= b.
在 2.5以上版本出现
operator.irepeat(a, b)¶
operator.__irepeat__(a, b)¶
从2.7版本开始不再支持:使用 __imul__() 来替代.
a = irepeat(a, b) 等同于 a *= b (a 是 sequenceb 是 integer.)
在 2.5以上版本出现
operator.irshift(a, b)¶
operator.__irshift__(a, b)¶
a = irshift(a, b) 等同于 a >>= b.
在 2.5以上版本出现
operator.isub(a, b)¶
operator.__isub__(a, b)¶
a = isub(a, b) 等同于 a -= b.
在 2.5以上版本出现
operator.itruediv(a, b)¶
operator.__itruediv__(a, b)¶
a = itruediv(a, b) 等同于 a /= b (当使用 __future__.division时)
在 2.5以上版本出现
operator.ixor(a, b)¶
operator.__ixor__(a, b)¶
a = ixor(a, b) 等同于 a ^= b.
在 2.5以上版本出现
operator 模块 也定义了一些 断言 来检验对象类型; 但是, 不是所有断言都很可靠. (查看collections和 numbers 以获取更多信息).
operator.isCallable(obj)¶
从2.0版本开始不再支持: 使用isinstance(x, collections.Callable)作为替代.
返回true如果对象obj 可以像函数一样被调用, 否则返回false. True 返回给函数可以选择是否绑定方法, 类对象, 和支持 __call__()方法的对象.
operator.isMappingType(obj)¶
从2.7版本开始不再支持: 使用 isinstance(x,collections.Mapping)作为替代.
返回true 如果对象 obj 支持mapping接口. 对于dictionaries 和 所有例对象定义的__getitem__()都返回true.
operator.isNumberType(obj)¶
从2.7版本开始不再支持:使用 isinstance(x,numbers.Number) 替代。
返回true 如果对象 obj 代表一个数. 对所有 用c实现的数据类型都返回true.
operator.isSequenceType(obj)¶
从2.7版本开始不再支持:使用isinstance(x, collections.Sequence) 作为替代.
返回true如果对象obj 支持 队列协议. 对于所有用C队列方法实现的对象,和所有定义了__getitem__().的例对象都返回true
operator 模块 也为广义属性和查找对象定义了工具. 这些为快速定义map(), sorted(),itertools.groupby()或者其他函数的提取器提供了有用的帮助,。
operator.attrgetter(attr)¶
operator.attrgetter(*attrs)
返回一个可以从attr中提取运算符的对象. 如果要求多于一个属性, 则返回一个属性元组. 属性名称可以包含(.). 例如:
f = attrgetter('name'), 调用 f(b) 返回 b.name.
f = attrgetter('name', 'date'), 调用 f(b) 返回 (b.name, b.date).
f = attrgetter('name.first', 'name.last'), 调用 f(b) 返回 (b.name.first, b.name.last).
等价于
defattrgetter(*items):
iflen(items) ==1:
attr = items[0]
defg(obj):
return resolve_attr(obj, attr)
else:
defg(obj):
returntuple(resolve_attr(obj, attr) for attr in items)
return g
defresolve_attr(obj, attr):
for name in attr.split("."):
obj =getattr(obj, name)
return obj
在2.4以上版本出现.
在2.5版本有改动: 添加支持多种属性.
在2.6版本有改动:添加支持域属性.
operator.itemgetter(item)¶
operator.itemgetter(*items)
通过使用 __getitem__() 方法,返回 一个可以调用的对象( 可以从操作对象中提取item). 如果要求多个item,返回一个查找关键词的元组. 例如:
f = itemgetter(2), 调用 f(r) 返回 r[2].
g = itemgetter(2, 5, 3), 调用 g(r) 返回 (r[2],r[5], r[3]).
等同于
defitemgetter(*items):
iflen(items) ==1:
item = items[0]
defg(obj):
return obj[item]
else:
defg(obj):
returntuple(obj[item] for item in items)
return g
items 可以是任何能被 __getitem__()方法操作的类型. 字典接受任何哈希值. Lists, tuples, 和 strings 接受下表和分片:
>>> itemgetter(1)('ABCDEFG')
'B'
>>> itemgetter(1,3,5)('ABCDEFG')
('B','D', 'F')
>>> itemgetter(slice(2,None))('ABCDEFG')
'CDEFG'
在 2.4以上版本出现.
在2.5版本有改动: 添加支持多项提取.
例如使用 itemgetter() 来 对元组操作
>>> inventory = [('apple', 3), ('banana', 2), ('pear', 5), ('orange', 1)]
>>> getcount = itemgetter(1)
>>> map(getcount,inventory)
[3, 2,5, 1]
>>> sorted(inventory,key=getcount)
[('orange',1), ('banana', 2), ('apple', 3), ('pear', 5)]
operator.methodcaller(name[, args...])¶
返回一个 可以调用的对象 (调用所提供的操作)例如:
f = methodcaller('name'), 调用f(b) 返回 b.name().
f = methodcaller('name', 'foo', bar=1), 调用 f(b) 返回 b.name('foo', bar=1).
等同于:
defmethodcaller(name, *args, **kwargs):
defcaller(obj):
returngetattr(obj, name)(*args, **kwargs)
return caller
在2.6以上版本出现