Pythonのoperator
モジュールのポイントは何ですか?明らかにそこに多くの冗長な機能があり、私は同じことをするために他の方法ではなく、これらの機能を使う方が好きではない理由を理解していません。例えばなぜ演算子モジュールの関数を使用するのですか?
:
>>> import operator
>>> operator.truth(0)
False
>>> bool(0)
False
はまったく同じことをやっているようです。
Pythonのoperator
モジュールのポイントは何ですか?明らかにそこに多くの冗長な機能があり、私は同じことをするために他の方法ではなく、これらの機能を使う方が好きではない理由を理解していません。例えばなぜ演算子モジュールの関数を使用するのですか?
:
>>> import operator
>>> operator.truth(0)
False
>>> bool(0)
False
はまったく同じことをやっているようです。
完全性と一貫性については、
一部の操作が重複しているため、その操作を省略すると、その目的が無効になります。 Pythonの名前は単なる参考情報なので、安価で簡単に別の参照であるoperator
モジュールに名前を追加することができます。
オペレータの機能にアクセスできるが、機能として役立つことが時に便利です。たとえば、2つの数字を一緒に追加することができます。
>> print(1 + 2)
3
また、あなたが簡単な数式与えられた答えを返す電卓機能を記述する必要がある可能性があり
>> import operator
>> print(operator.add(1, 2))
3
関数アプローチのためのユースケースを行うことができます。 bool
の存在を考えると
import operator as _operator
operator_mapping = {
'+': _operator.add,
'-': _operator.sub,
'*': _operator.mul,
'/': _operator.truediv,
}
def calculate(formula):
x, operator, y = formula.split(' ')
# Convert x and y to floats so we can perform mathematical
# operations on them.
x, y = map(float, (x, y))
return operator_mapping[operator](x, y)
print(calculate('1 + 2')) # prints 3.0
、それはoperator.truth
これらの日のための任意のユースケースを考えるのは難しいです。 bool
は2.2.1で新しくなったことに注意してください。演算子はそれ以前のものですから、歴史的な理由からしか存在しない可能性があります。オペレータモジュールには、operator.abs
などの無駄な機能があります。これは単に組み込みのabs
を呼び出します。
演算子モジュールは、関数型プログラミングに役立つことがあります。たとえば、Pythonにはsum
関数が組み込まれていますが、類似の関数product
は含まれていません。これは、乗算に対する演算子の機能的インターフェースを使用して簡単に実装できます。
>>> from operator import mul
>>> from functools import reduce
>>> def product(sequence, start=1):
... return reduce(mul, sequence, start)
...
>>> product([7, 2, 3])
42
これを実装する方法は他にもあります。おそらく手続き的な方法、すなわち単純な古いforループを使用して*
演算子で累積するという方法は、より非平凡です。どんな理由であれ、絶対に必要なスタイルを使用しないことを選択し、ユーザーのために
、オペレータモジュールは、オペレータのC implementation(利用可能な場合は)上でパフォーマンスの向上を提供しています無名関数に
>>> timeit reduce(lambda x, y: x*y, range(1, 100))
10000 loops, best of 3: 24.3 µs per loop
>>> timeit reduce(mul, range(1, 100))
100000 loops, best of 3: 14.9 µs per loop
を使用するよりもおいしいの実装を提供しています下位lambda
バージョン。オペレータモジュールで提供されるitemgetter
,およびの機能は、匿名機能によってしばしば処理される種類の単純なタスクに対して、より読みやすく優れた実行オプションを提供します。
関連:http://stackoverflow.com/q/22387166/674039 – wim