Python3 operator
Python3 学习笔记 · 整理自菜鸟教程
一句话
operator 模块把 Python 的各种运算符封装成函数,便于配合 map、sorted、reduce 等使用。
要点
- 运算符本身不能当参数传,
operator提供对应的函数形式,解决这个限制。 - 常用等价:
+→add、-→sub、*→mul、==→eq、<→lt。 - 排序取值神器
itemgetter/attrgetter,比手写lambda x: x[1]更快更清晰。 methodcaller可调用对象的方法,如methodcaller("upper")。operator.add等函数在reduce、map里配合使用非常顺手。- 是 C 实现,性能通常优于等价的
lambda。
语法 / 常用方法
| 函数 | 等价运算符 | 说明 |
|---|---|---|
add(a, b) |
a + b |
加 |
sub(a, b) |
a - b |
减 |
mul(a, b) |
a * b |
乘 |
truediv(a, b) |
a / b |
真除 |
floordiv(a, b) |
a // b |
整除 |
mod(a, b) |
a % b |
取模 |
pow(a, b) |
a ** b |
幂 |
neg(a) |
-a |
取负 |
eq(a, b) / ne(a, b) |
== / != |
等于 / 不等于 |
lt / le / gt / ge |
< <= > >= |
大小比较 |
and_(a, b) / or_(a, b) / not_(a) |
and / or / not |
逻辑 |
itemgetter(k) |
x[k] |
取下标/键,可多参 |
attrgetter("name") |
x.name |
取属性,支持点号路径 |
methodcaller("m", ...) |
x.m(...) |
调用方法 |
contains(seq, x) |
x in seq |
成员判断 |
concat(a, b) |
a + b |
序列拼接 |
length_hint(it) |
约等于 len |
估算长度 |
代码示例
1 | |
易错点
itemgetter传一个键返回单值,传多个键返回元组,用于多级排序。- 逻辑运算函数带下划线:
and_、or_、not_,因为and是关键字不能当函数名。 attrgetter支持点号路径,如"info.name",但属性不存在会直接报AttributeError。truediv与floordiv别搞混:前者是/,后者是//。- 排序时
key=op.itemgetter(1)只对序列用,字典排序要用key指定键或先转项。 - 别为了用
operator而用,只有比lambda更清晰或更快时才换。