python standard_library operator

python 标准库 operator

今天的关键词: trouble

trouble

[英] [ˈtrʌbl]

[美] [ˈtrʌbəl]

n.麻烦; 烦恼; 故障; 动乱;

vi.费心; 烦恼;

vt.麻烦; 使烦恼; 折磨;

python 标准库学习 operator

operator 模块提供了一套与Python的内置运算符对应的高效率函数。例如,operator.add(x, y) 与表达式 x+y 相同。 许多函数名与特殊方法名相同,只是没有双下划线。为了向后兼容性,也保留了许多包含双下划线的函数。为了表述清楚,建议使用没有双下划线的函数。

函数包含的种类有:对象的比较运算、逻辑运算、数学运算以及序列运算。

对象比较函数适用于所有的对象,函数名根据它们对应的比较运算符命名。

比较运算

operator.lt(*a*, *b*)

operator.le(*a*, *b*)

operator.eq(*a*, *b*)

operator.ne*a*, *b*)

operator.ge*a*, *b*)

operator.gt*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*)

逻辑运算

  • operator.not_(*obj*)`

  • operator.__not__(*obj*)

    返回 not*obj* 的结果。 (请注意对象实例并没有 [not()](https://docs.python.org/zh-cn/3.8/library/operator.html#operator.__not__) 方法;只有解释器核心可定义此操作。 结果会受 [bool()](https://docs.python.org/zh-cn/3.8/reference/datamodel.html#object.__bool__) 和 [len()`](https://docs.python.org/zh-cn/3.8/reference/datamodel.html#object.__len__) 方法影响。)

  • `operator.truth(obj)

    如果 obj 为真值则返回 True,否则返回 False。 这等价于使用 bool 构造器。

  • 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*)

    对于数字 ab,返回 a + b

  • operator.and_(*a*, *b*)

  • operator.__and__(*a*, *b*)

    返回 xy 按位与的结果。

  • operator.floordiv(*a*, *b*)

  • operator.__floordiv__(*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*)

    对于数字 ab,返回 a * b

  • operator.matmul(*a*, *b*)

  • operator.__matmul__(*a*, *b*)

    返回 a @ b

  • operator.neg(*obj*)

  • operator.__neg__(*obj*)

    返回 obj 取负的结果 (-obj)`。

  • operator.or_(*a*, *b*)

  • operator.__or__(*a*, *b*)

    返回 ab 按位或的结果。

  • operator.pos(*obj*)

  • operator.__pos__(*obj*)

    返回 obj 取正的结果 (+obj)`。

  • operator.pow(*a*, *b*)

  • operator.__pow__(*a*, *b*)

    对于数字 ab,返回 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 将等于 .66 而不是 0。 这也被称为“真”除法。

  • operator.xor(*a*, *b*)

  • operator.__xor__(*a*, *b*)

    返回 ab 按位异或的结果。

适用于序列的操作(其中一些也适用于映射)包括:

  • operator.concat(*a*, *b*)

  • operator.__concat__(*a*, *b*)

    对于序列 ab,返回 a + b

  • operator.contains(*a*, *b*)

  • operator.__contains__(*a*, *b*)

    返回 b in a 检测的结果。 请注意操作数是反序的。

  • operator.countOf(*a*, *b*)

    返回 ba 中的出现次数。

  • operator.delitem(*a*, *b*)

  • operator.__delitem__(*a*, *b*)

    移除索引号 b 上的值 a

  • operator.getitem(*a*, *b*)

  • operator.__getitem__(*a*, *b*)

    返回索引号 b 上的值 a

  • operator.indexOf(*a*, *b*)

    返回 ba 中首次出现所在的索引号。

  • operator.setitem(*a*, *b*, *c*)

  • operator.__setitem__(*a*, *b*, *c*)

    将索引号 b 上的值 a 设为 c

  • operator.length_hint(*obj*, *default=0*)

    返回对象 o 的估计长度。 首先尝试返回其实际长度,再使用 object.__length_hint__() 得出估计值,最后返回默认值。

工具

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

`operator.itemgetter(item)

`operator.itemgetter(*items)

返回一个使用操作数的 __getitem__() 方法从操作数中获取 item 的可调用对象。 如果指定了多个条目,则返回一个查找值的元组。 例如:

  • f = itemgetter(2) 之后,调用 f(r) 将返回 r[2]
  • g = itemgetter(2, 5, 3) 之后,调用 g(r) 将返回 (r[2], r[5], r[3])`。

将运算符映射到函数

运算 语法 函数
加法 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))
切片取值 seq[i:j] getitem(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 gt(a, b)

原地运算符

  • operator.iadd(*a*, *b*)

  • operator.__iadd__(*a*, *b*)

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

  • operator.iand(*a*, *b*)

  • operator.__iand__(*a*, *b*)

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

  • operator.iconcat(*a*, *b*)

  • operator.__iconcat__(*a*, *b*)

    a = iconcat(a, b) 等价于 a += b 其中 ab 为序列。

  • 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 = imod(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 @= b3.5 新版功能.

  • 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.__isub__(*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

实例

朋友建议我说,别光说标准库的基本使用,最好有一些实际的例子,接下来我会在每一篇博客的最后给大家一些实际应用的例子,欢迎大家批评指正。

稍后我会在对应的文章下面开通gitalk,大家可以及时给我留言。

实现一个简单的计算器,不使用if else

1
2
3
4
5
6
7
8
9
10
11
12
13
from operator import *

def calculator(a, b, k):
return {
'+': add,
'-': sub,
'*': mul,
'/': truediv,
'**': pow
}[k](a, b)

calculator(1, 2, '+') # 3
calculator(3, 4, '**') # 81
坚持原创技术分享,您的支持将鼓励我继续创作!