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')

:

]

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):

:

]

defg(obj):

return obj[item]

else:

defg(obj):

returntuple(obj[item] for item in items)

return g

Items可以是任何类型,只要该类型可以接受__getitem__()方法的操作。字典结合搜任何可哈希的值。列表、元组和字符串接受索引或者片段:

)('ABCDEFG')

'B'

)('ABCDEFG')

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

,None))('ABCDEFG')

'CDEFG'

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

)]

)

>>>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。

Python基础学习:operator模块的更多相关文章

  1. python基础学习笔记——模块

    自定义模块 我们今天来学习一下自定义模块(也就是私人订制),我们要自定义模块,首先就要知道什么是模块啊 一个函数封装一个功能,比如现在有一个软件,不可能将所有程序都写入一个文件,所以咱们应该分文件,组 ...

  2. Python 基础学习 总结篇

    Python 基础学习总结 先附上所有的章节: Python学习(一)安装.环境配置及IDE推荐 Python学习(二)Python 简介 Python学习(三)流程控制 Python学习(四)数据结 ...

  3. python基础学习(起步)

    目录 python基础学习(起步) 变量 常量 变量的内存管理 python垃圾回收机制 变量的其他赋值方式 今日编程小题 本人能力有限,若有偏颇之处请读者大大不吝赐教! 祝大家每天都在成长! pyt ...

  4. python基础31[常用模块介绍]

    python基础31[常用模块介绍]   python除了关键字(keywords)和内置的类型和函数(builtins),更多的功能是通过libraries(即modules)来提供的. 常用的li ...

  5. python基础学习10

    python基础学习 内容概要 文件内光标的移动 文件数据修改 函数简介 函数语法结构 内容详情 文件内光标的移动 with open(r'路径','r',encoding='utf8') as f: ...

  6. Day1 Python基础学习

    一.编程语言分类 1.简介 机器语言:站在计算机的角度,说计算机能听懂的语言,那就是直接用二进制编程,直接操作硬件 汇编语言:站在计算机的角度,简写的英文标识符取代二进制去编写程序,本质仍然是直接操作 ...

  7. 0003.5-20180422-自动化第四章-python基础学习笔记--脚本

    0003.5-20180422-自动化第四章-python基础学习笔记--脚本 1-shopping """ v = [ {"name": " ...

  8. Python中使用operator模块实现对象的多级排序

    Python中使用operator模块实现对象的多级排序 今天碰到一个小的排序问题,需要按嵌套对象的多个属性来排序,于是发现了Python里的operator模块和sorted函数组合可以实现这个功能 ...

  9. Day1 Python基础学习——概述、基本数据类型、流程控制

    一.Python基础学习 一.编程语言分类 1.简介 机器语言:站在计算机的角度,说计算机能听懂的语言,那就是直接用二进制编程,直接操作硬件 汇编语言:站在计算机的角度,简写的英文标识符取代二进制去编 ...

  10. 十八. Python基础(18)常用模块

    十八. Python基础(18)常用模块 1 ● 常用模块及其用途 collections模块: 一些扩展的数据类型→Counter, deque, defaultdict, namedtuple, ...

随机推荐

  1. exec 命令

    source source命令即点(.)命令. 在bash下输入man source,找到source命令解释处,可以看到解释”Read and execute commands from filen ...

  2. 知乎使用selenium反爬虫的解决方案

    from selenium.webdriver import Chrome from selenium.webdriver import ChromeOptions option = ChromeOp ...

  3. 引入maven以外的jar包

    这里有2个案例,需要手动发出Maven命令包括一个 jar 到 Maven 的本地资源库. 要使用的 jar 不存在于 Maven 的中心储存库中. 您创建了一个自定义的 jar ,而另一个 Mave ...

  4. Hdu 4578 Transformation (线段树 分类分析)

    Transformation Time Limit: 15000/8000 MS (Java/Others)    Memory Limit: 65535/65536 K (Java/Others)T ...

  5. MVC调用函数function.php

    <?php //控制器的调用函数C function C($name, $method){ require_once('/libs/controller/'.$name.'Controller. ...

  6. ant-design如果按需加载组件

    Ant Design React按需加载 Ant Design是阿里巴巴为React做出的组件库,有统一的样式及一致的用户体验 官网地址:https://ant.design 1.安装: npm in ...

  7. ElasticSearch基本概念阐述

    下面阐述一下ES当中的一些常见词语含义: 集群 集群由一个或多个节点组成,对外提供服务,索引和搜索功能.在所有的节点中,一个集群有一个唯一的名称默认为“ElasticSearch”,此名称很重要,因为 ...

  8. [Poj2349]Arctic Network(二分,最小生成树)

    [Poj2349]Arctic Network Description 国防部(DND)要用无线网络连接北部几个哨所.两种不同的通信技术被用于建立网络:每一个哨所有一个无线电收发器,一些哨所将有一个卫 ...

  9. opengl 单缓冲与双缓冲

    1.说明 GLUT_SINGLE  指定单缓存窗口 GLUT_DOUBLE  指定双缓存窗口 应用程序使用单缓冲绘图时可能会存在图像闪烁的问题. 这是因为生成的图像不是一下子被绘制出来的,而是按照从左 ...

  10. springboot通过继承OncePerRequestFilter,在拦截器中@Autowired 为null问题

    springboot2版本以上环境 通过继承OncePerRequestFilter类,在重写doFilterInternal方法实现拦截的具体业务逻辑, 在实现的过程中,需要注入service方法, ...