Python Lambda с Or - PullRequest
       6

Python Lambda с Or

3 голосов
/ 04 марта 2010

При чтении документации кажется, что это может быть невозможно, но, похоже, многим людям удалось превратить более сложную функциональность в лямбда-функцию питонов.

Я использую библиотеки scapy для создания пакетов. В частности, этот вопрос о ConditionalField, который принимает его как поле и функцию сравнения, поле добавляется в пакет, только если сравнение истинно, но мне нужно сделать 2 сравнения.

Пример только с одной проверкой, это работает:

ConditionalField(XShortField("chksum",None),lambda pkt:pkt.chksumpresent==1)

Что я хочу:

ConditionalField(XShortField("chksum",None),lambda pkt:pkt.chksumpresent==1 or (lamba pkt:pkt.special == 1))

Это не дает ожидаемых результатов. Есть ли способ сделать это?

Ответы [ 2 ]

8 голосов
/ 04 марта 2010
lambda pkt:((pkt.chksumpresent == 1) or (pkt.special == 1))
6 голосов
/ 04 марта 2010

Является ли лямбда наиболее читаемой / поддерживаемой? Следующее так же эффективно:

def checksum_condition(pkt):
    return pkt.chksumpresent == 1 or pkt.special == 1

ConditionalField(XShortField("chksum",None), checksum_condition)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...