Это, возможно, глупый вопрос, но, глядя на отображение операторов на функции, я заметил, что нет функции для выражения not in
. Сначала я подумал, что это, вероятно, потому, что интерпретатор просто переупорядочивает это как not x in y
, но есть функция для is not
, которая, похоже, должна вести себя точно так же, как not in
. Я что-то упускаю, или этот оператор действительно не существует?
Вот действительно глупый пример, где вам может понадобиться следующее:
def compare_iter(a,b,func):
return [func(aa,bb) for aa,bb in zip(a,b)]
my_compare=compare_iter(xx,yy,lambda x,y:x not in y) #lambda -- yuck
my_compare=map(operator.not_,compare_iter(xx,yy,operator.contains) #extra map? grr...
#it would be nice to do: my_compare=compare_iter(xx,yy,operator.not_contains)
Конечно, я мог бы написать свою собственную функцию для этого, но тогда вы платите цену за эффективность, тогда как операторский модуль может вывести этот код из питона и, следовательно, выполнять быстрее.