zoukankan      html  css  js  c++  java
  • Python基础学习:operator模块

    operator——函数的标准操作

    转自:https://blog.csdn.net/zhtysw/article/details/80510113

    代码资源:Lib/operator.py

    operator模块输出一系列对应Python内部操作符的函数。例如:operator.add(x, y)等价于表达式x+y。许多函数的名称都被一些特定的方法使用,没有下划线加持。为了向下兼容,它们中的许多都保留着由双下划线的变体。那些不具备双下划线的变体是为了使表达更清晰。

    这些函数在各种函数目录里扮演者对相比较、逻辑操作、数学运算以及序列操作等角色。

    对于所有对象来讲对象比较函数是十分有用的,并且这些函数以它们支持的丰富的比较操作命名。

    operator. lt(a, b)          //less than小于

    operator. le(a, b)          //lessthan or equal to小于等于

    operator. eq(a, b)          //equal to等于

    operator. ne(a, b)          //not equalto不等于

    operator. ge(a, b)          //greaterand equal to大于等于

    operator. gt(a, b)          //greater大于

    operator. __le__(a, b)

    operator. __lt__(a, b)

    operator. __eq__(a, b)

    operator. __ne__(a, b)

    operator. __ge__(a, b)

    operator. __gt__(a, b)

    在a与b之间之行丰富的比较操作。特别地,lt(a, b)等价于a < b、le(a, b)等价于a <= b、eq(a, b)等价于a == b、ne(a, b)等价于a != b、gt(a, b)等价于a > b、ge(a, b)等价于a >= b。注意:这些函数可以返回任何值,这个值可能当做布尔值用、也有可能不行。

    逻辑操作一般也适用于所有对象,并且支持真值比较、定义测试和布尔操作。

    operator. not_(obj)

    operator. __not__(obj)

    返回非obj的结果。(注意:对于对象实例不存在__not__()方法;只有解释器代码定义了这个操作。它的结果受__bool__()和__len__()方法影响)。

    operator. truth(obj)

    如果obj是真的,就返回True,否则返回False。等价于使用布尔构造器。

    operator. is_(a, b)

    返回表达式a is b,用于测试对象的定义。

    operator. is_not(a, b)

    返回表达式a is not b,用于测试对象定义。

        数学运算和按位运算是最多的:

    operator. abs(obj)

    operator. __abs__(obj)

    返回obj的绝对值。

    operator. add(a, b)

    operator. __add__(a, b)

    返回a+b,a与b应为数字。

    operator. and(a, b)

    operator. __and__(a, b)

    返回a与b的按位与操作结果。

    operator. floordiv(a, b)

    operator. __floordiv(a, b)

    返回a//b。(a/b向下取整)

    operator. index(a)

    operator. __index__(a)

    将a转换为整数数据并返回。等价于a. __index__()

    operator. inv(obj)

    operator. invert(obj)

    operator. __inv__(obj)

    operator. __invert__(obj)

    对数字obj按位求反,并返回。等价于~obj

    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. matmul(a, b)

    operator. __matmul__(a, b)

    返回a@b

    operator. nge(obj)

    operator. __neg__(obj)

    返回obj的负值(-obj)。

    operator. or(a, b)

    operator. __or__(a, b)

    a与b按位求或,并返回结果值。

    operator. pos(obj)

    operator. __pow__(obj)

    返回obj的正值(+obj)。

    operator. pow(a, b)

    operator. __pow__(a, b)

    返回a ** b,a与b都为数字。

    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,并且类似于2/3是0.66而不是0。它也被称为真除法。

    operator. xor(a, b)

    operator. __xor__(a, b)

    a与b按位异或,并返回结果。

        和序列有关的操作(其中的一些也可用于映射),包括:

    operator. concat(a, b)

    operator. __concat__(a, b)

    返回a + b,a与b都为序列。

    operator. contains(a, b)

    operator. __contains__(a, b)

    返回测试b in a的结果。请注意反转操作数。

    operator. countof(a, b)

    返回b在a中出现的次数。

    operator. delitem(a, b)

    operator. __delitem__(a, b)

    删除a索引b的值。

    operator. getitem(a, b)

    operator. __getitem__(a, b)

    返回a索引b的值。

    operator. indexof(a, b)

    返回b在a中第一次出现时的索引。

    operator. setitem(a, b, c)

    operator. __setitem__(a, b, c)

    a中索引b的位置上的值设置为c。

    operator. length_hint(obj, default=0)

    返回对象obj的估算长度。首先试图返回真实的长度,不行的话使用obj.__length_hint__()估算长度,再不行的话返回默认值规定的长度。

    operator模块也定义了一些广义属性和项目查找的工具。它们常用于为诸如map()、sorted()、itertools. groupby()或其他需要函数作为参数的函数提供参数,该参数为一个高速的字段提取器。

    operator. attrgetter(attr)

    operator. attrgetter(*attrs)

    返回一个可点用对象,该对象能从其操作中捕获attr。如果提供了多个属性,返回一个属性构成的元组。属性名也可以包含符号点。例如:

    •••运行 f = attrgetter(‘name’)之后,调用f(b),返回b.name

    •运行 f = attregetter(‘name’,’date’)之后,调用f(b),返回(b. name, b,date)

    •运行f =attregetter(‘name.first’, ‘name. last’)之后,调用f(b),返回(b. name. first, b. name. last)

    等价于:

    defattrgetter(*items):

        ifany(notisinstance(item, str) for item in items):

            raiseTypeError('attribute namemust be a string')

        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

    operator. itemgetter(item)

    operator. itemgetter(*items)

    返回一个可调用对象,该对象可以使用操作__getitem__()方法从自身的操作中捕获item。如果制定了多个items,返回一个由查询值组成的元组。例如:

    •运行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__()方法的操作。字典结合搜任何可哈希的值。列表、元组和字符串接受索引或者片段:

    >>>itemgetter(1)('ABCDEFG')

    'B'

    >>>itemgetter(1,3,5)('ABCDEFG')

    ('B', 'D','F')

    >>>itemgetter(slice(2,None))('ABCDEFG')

    'CDEFG'

    例如使用itemgetter()从元组记录中取回特定的字段:

    >>>inventory = [('apple', 3), ('banana', 2), ('pear', 5), ('orange', 1)]

    >>>getcount = itemgetter(1)

    >>>list(map(getcount, inventory))

    [3, 2, 5,1]

    >>>sorted(inventory, key=getcount)

    [('orange',1), ('banana', 2), ('apple', 3), ('pear', 5)]

    operator. methodcaller(name[, args…])

    返回一个可调用的对象,该对象可以在其操作内调用名为name的方法。如果额外的参数或者关键字参数被给出,它们也会被传递给方法。例如:

    •运行 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

    1. 函数的映射操作

       

    操作

    语法

    函数

    加法

    a + b

    add(a, b)

    连接

    seq1 + seq2

    concat(seq1, seq2)

    包含测试

    obj in seq

    contains(seq, obj)

    除法

    a / b

    truediv(a, b)

    除法

    a // b

    floordiv(a, b)

    按位与

    a & b

    and_(a, b)

    按位异或

    a ^ b

    xor(a, b)

    按位求反

    ~ a

    invert(a)

    按位求或

    a | b

    or_(a, b)

    求幂

    a ** b

    pow(a, b)

    身份测试

    a is b

    is_(a, b)

    身份测试

    a is not b

    is_not(a, b)

    索引分配

    obj[k] = v

    setitem(obj, k, v)

    索引删除

    del obj[k]

    delitem(obj, k)

    得出索引键值

    obj[k]

    getitem(obj, k)

    左移

    a << b

    lshift(a, b)

    求模

    a % b

    mod(a, b)

    乘法

    a * b

    mul(a, b)

    矩阵乘法

    a @ b

    matmul(a, b)

    求负值(数学)

    - a

    neg(a)

    求负值(逻辑)

    not a

    not_(a)

    求正值

    + a

    pos(a)

    右移

    a >> b

    rshift(a, b)

    片段分配

    seq[i: j] = values

    setitem(seq, slice(I, j), values)

    片段删除

    del seq[i, j]

    delitem(seq, slice(I, j))

    得到片段

    swq[i : j]

    getitme(seq, slice(i, j))

    字符串格式化

    s % obj

    mod(s, obj)

    减法

    a - b

    sub(a, b)

    真值测试

    obj

    truth(obj)

    排序

    a < b

    lt(a, b)

    排序

    a <= b

    le(a, b)

    相等

    a == b

    eq(a, b)

    不等

    a !- b

    ne(a, b)

    排序

    a >= b

    ge(a, b)

    排序

    a > b

    ge(a, b)

    2.原址操作

    许多操作都有其原地操作版本。以下列出的函数提供了比普通语法操作更原始的原址操作。例如:语句x += y等价于x = operator. iadd(x, y)。其它方法提出说z = operatgor.iadd(x, y)等价于复合语句 z= x; z += y

    在其他例子中,注意,当一个原址操作被调用,计算和分配在讲个分割开来的步骤里进行。以下列出的原址函数值做了第一步,调用原址方法。第二步,分配却没有被操作。

    对于不变的目标李如意字符串、数组和元组,被更新的值是需要计算的,但是不回配输入变量:

    >>>a ='hello'

    >>>iadd(a, ' world')

    'helloworld'

    >>>a

    'hello

    对于可变对象例如列表和字典,预案之操作将会运行更新,因此不需要后续分配。

    >>>s = ['h', 'e', 'l', 'l', 'o']

    >>>iadd(s, [' ', 'w', 'o', 'r', 'l', 'd'])

    ['h', 'e','l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd']

    >>>s

    ['h', 'e','l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd']

    operator. iadd(a, b)

    operator. __iadd__(a, b)

    a = iadd(a, b)等价于a += b

    operator. iand(a, b)

    operator. __iand__(a, b)

    a = land(a, b)等价于a &= b

    operator. iconcat(a, b)

    operator. __iconcat__(a, b)

    a = iconcat(a, b)等价于a += b,a与b都为序列。

    operator. ifloordiv(a, b)

    operator. __ifloordiv__(a, b)

    a = ifloordiv(a, b)等价于 a //= b

    operator. ilshift(a, b)

    operator. __ilshift__(a, b)

    a = ilshift(a, b)等价于a <<= b

    operator. imod(a, b)

    operator. __imod__(a, b)

    a = imud(a, b)等价于a %= b

    operator. imul(a, b)

    operator. imul(a, b)

    a = imul(a, b)等价于a *= b

    operator. imatmul(a, b)

    operator. __imatmul__(a, b)

    a = imatmul(a, b)等价于a @= b

    operator. ior(a, b)

    operator. __ior__(a, b)

    a = ior(a, b)等价于a |= b

    operator. ipow(a, b)

    operator. __ipow__(a, b)

    a = ipow(a, b)等价于a ** b

    operator. irshift(a, b)

    operator. __irshift__(a, b)

    a = irshift(a, b)等价于a >> b

    operator. isub(a, b)

    operator. __sub__(a, b)

    a = isub(a, b)等价于a -= b

    operator. itruediv(a, b)

    operator. __itruediv__(a, b)

    a = itruediv(a, b)等价于a /= b

    operator. ixor(a, b)

    operator. __ixor__(a, b)

        a = ixor(a, b)等价于a ^= b

  • 相关阅读:
    UDP案例_在线咨询
    MFC对话框水平和垂直滚动条功能
    对话框中滚动条
    ON_COMMAND_RANGE 多个按钮响应一个函数
    char**赋值
    MFC如何使dialog对话框置顶
    如何让CListBox控件滚动条自动向下滚动?
    不带,以及带参数,带返回值的Lambda表达式
    JAVA学习_多线程技术
    最烦有些技术帖上来就放代码
  • 原文地址:https://www.cnblogs.com/langqi250/p/10854766.html
Copyright © 2011-2022 走看看