3 Stimmen

Python Lambda mit Or

Das Lesen der Dokumentation scheint dies nicht möglich zu sein, aber es scheint, dass eine Menge Leute in der Lage waren, kompliziertere Funktionalität in Pythons Lambda-Funktion zu schlagen.

Ich nutze die scapy-Bibliotheken, um einige Pakete zu erstellen. Speziell diese Fragen ist über die ConditionalField, die es ein Feld und eine Vergleichsfunktion nimmt, das Feld nur hinzugefügt, um das Paket, wenn der Vergleich wahr ist, aber ich brauche, um 2 Vergleiche zu tun.

Beispiel mit nur einer Prüfung, das funktioniert:

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

Was ich will:

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

Dies führt nicht zu den erwarteten Ergebnissen. Gibt es eine Möglichkeit, dies zu tun?

8voto

Ignacio Vazquez-Abrams Punkte 735200
lambda pkt:((pkt.chksumpresent == 1) or (pkt.special == 1))

6voto

Joe Koberg Punkte 23526

Ist lambda die lesbarste/wartbarste? Das Folgende ist genauso leistungsfähig:

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

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X