operator模塊可以很容易地避免這樣的情況中不必要的功能和lambda表達式 :爲什麼操作員模塊缺少`and`和`or`?
import operator
def mytest(op, list1, list2):
ok = [op(i1, i2) for i1, i2 in zip(list1, list2)]
return all(ok)
mytest(operator.eq, [1, 2, 3], [1, 2, 3]) # True
mytest(operator.add, [-1, 2, -3], [1, -2, 33]) # False
好了,現在我需要做的i1 and i2
,但讓我驚訝的是,我不能操作模塊中找到and
!這同樣適用於or
!我知道,and
是不完全操作,這是一個關鍵字,但not
,與is
甚至del
一起,是所有關鍵字,所有都包括在內。
那麼故事是怎麼回事?他們爲什麼失蹤?
operator.and_和operator.or_都在那裏。其他關鍵字操作符也一樣,您需要_。 – tdelaney
'operator.and_'和'operator.or_'是按位運算符'&'和'|',而不是邏輯'和'和'or'。 – kindall
作爲一個方面說明,你並不需要'ok'來成爲一個列表。如果'list1'和'list2'可以非常大,尤其是如果可能在列表中顯示錯誤,那麼使用生成器表達式而不是listcomp會好得多(並且,如果'重新使用2.x,'itertools.izip'而不是'zip')。 – abarnert