2010-03-04 45 views
3

閱讀文檔似乎這可能是不可能的,但似乎很多人已經能夠將更復雜的功能打敗成pythons lambda函數。Python Lambda或

我利用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)) 

這是不是給預期的結果。有沒有辦法做到這一點?

回答

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

lambda是最易讀/可維護的嗎?以下只是性能:

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

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