2010-03-04 8 views
3

En lisant la documentation, il semble que ce ne soit pas possible, mais il semble que beaucoup de gens ont été capables de battre des fonctionnalités plus compliquées dans la fonction python lambda. J'utilise les bibliothèques Scapy pour créer des paquets. Spécialement cette question concerne le ConditionalField qui prend un champ et une fonction de comparaison, le champ n'étant ajouté au paquet que si la comparaison est vraie, mais j'ai besoin de faire 2 comparaisons.Python Lambda avec Or

Exemple avec un seul chèque, cela fonctionne:

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

Ce que je veux:

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

Ce ne donne pas les résultats escomptés. Y a-t-il un moyen de faire cela?

Répondre

8
lambda pkt:((pkt.chksumpresent == 1) or (pkt.special == 1)) 
6

Le lambda est-il le plus lisible/maintenable? Ce qui suit est tout aussi performant:

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

ConditionalField(XShortField("chksum",None), checksum_condition)