operator: 模块提供了很多python内置运算符对应的函数。 比如加,减,乘,除,与,或,非,is, is not等等。
此模块存在的意义:有时我们在函数式编程时,经常要将一个函数传递给另一个函数。对于像加,减,乘,除这些我们当然可以自定义一个函数,或使用lambda函数来做为参数传递,但这样在性能上不如使用operator模块里的内置函数。
下面是一个性能对比:
PS> python -m timeit "(lambda a, b: a + b)(10, 10)"
5000000 loops, best of 5: 82.3 nsec per loop
PS> python -m timeit -s "from operator import add" "add(10, 10)"
10000000 loops, best of 5: 24.5 nsec per loop
PS> python -m timeit "10 + 10"
50000000 loops, best of 5: 5.19 nsec per loopPS> python -m timeit "(lambda a, b: a ** b)(10, 10)"
1000000 loops, best of 5: 226 nsec per loop
PS> python -m timeit -s "from operator import pow" "pow(10, 10)"
2000000 loops, best of 5: 170 nsec per loop
PS> python -m timeit "10 ** 10"
50000000 loops, best of 5: 5.18 nsec per loop
示例使用了一个两数相加的简单例子做性能对比,结果是,内置运算符 > operator内置函数 > lambda函数或自定义函数。
列举几个operator模块函数与运算符的关系:
a + b
对应add(a, b)
,
seq1 + seq2
对应concat(seq1, seq2)
,
obj in seq
对应contains(seq, obj)
,
a < b
对应lt(a, b)
。