python operator — 标准函数操作

来源:互联网 发布:windows keynote 编辑:程序博客网 时间:2024/05/20 23:29

喵喵喵。。。

本文翻译自:https://docs.python.org/2.7/library/operator.html       如有错误之处,欢迎大家指出!


Operator模块提供了一系列与Python自带操作一样有效的函数。例如:operator.add(x, y)和表达式x+y是等效的。那些特殊类的方法都有自己的函数名;为了方便起见,一些函数名是没有前导和后置(__)。 在接下来讨论的函数涉及对象比较,逻辑运算,数学运算,队列操作和抽象类型测试。对象比较函数对所有对象都适用,并且都以他们所支持的丰富的比较操作而命名。


operator.lt(a, b)                    #等价于a<boperator.le(a, b)                    #等价于a<=boperator.eq(a, b)                    #等价于a==boperator.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>=boperator.gt(a, b)<span style="white-space:pre"></span>     #等价于a>boperator.__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 (ab 都是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 ( ab 都是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 模块 也定义了一些 断言 来检验对象类型; 但是, 不是所有断言都很可靠. (查看collectionsnumbers 以获取更多信息).

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以上版本出现



0 0
原创粉丝点击