Учитывая существование bool
, это трудно думать о каком-либо потребительном случае для operator.truth
этих дней. Обратите внимание, что bool
был новым в 2.2.1, и оператор предшествует этому, поэтому он может существовать только по историческим причинам. В операционном модуле есть и другие бесполезные функции, такие как operator.abs
- который просто вызывает встроенный abs
.
Операционный модуль иногда полезен для функционального программирования. Например, Python имеет встроенную функцию sum
, но пренебречь включением аналогичной функции product
. Это может быть реализовано с использованием succintly функциональный интерфейс оператора умножения:
>>> from operator import mul
>>> from functools import reduce
>>> def product(sequence, start=1):
... return reduce(mul, sequence, start)
...
>>> product([7, 2, 3])
42
Это правда, что существуют и другие способы реализации этого. Вероятно, процедурный метод, то есть использование простого старого цикла и накопления с помощью оператора *
, более питонов.
Для пользователей, которые по каким-либо причинам, предпочитают не использовать императивный стиль, модуль оператор предлагает более вкусную реализацию, чем при использовании анонимных функций
>>> 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
оператора C implementation (если таковые имеются) предлагает прирост производительности по сравнению с inferior lambda
версия. Функции itemgetter
, attrgetter
и methodcaller
, предоставляемые в операторском модуле, также предлагают более читаемые и более эффективные параметры для простых задач, которые часто обрабатываются анонимными функциями.
Связанный: http://stackoverflow.com/q/22387166/674039 – wim