Я делаю программу для расчета задержки из файла tcpdump / pcap, и я хочу иметь возможность указывать правила в командной строке для корреляции пакетов - т.е. найти время, необходимое между отправкой правила сопоставления пакетов A для полученияправило сопоставления пакетов B (конкретным примером будет отправка FIX NewOrderSingle и получение соответствующего отчета FIX ExecutionReport).
Это пример полей в пакете (до того, как они были преобразованы в словарную форму)) - Я тестирую числовую версию поля (в скобках), а не английскую версию:
BeginString (8): FIX.4.2
BodyLength (9): 132
MsgType (35): D (ORDER SINGLE)
SenderCompID (49): XXXX
TargetCompID (56): EXCHANGE
MsgSeqNum (34): 1409104
SendingTime (52): 20100723-12:49:52.296
Side (54): 1 (BUY)
Symbol (55): A002
ClOrdID (11): BUY704552
OrderQty (38): 1000
OrdType (40): 2 (LIMIT)
Price (44): 130002
TimeInForce (59): 3 (IMMEDIATE OR CANCEL)
QuoteID (117): A002
RelatdSym (46): A002
CheckSum (10): 219 [correct]
В настоящее время у меня есть аргументы, выходящие из командной строки во вложенный список:
[[35, 'D'], [55, 'A002']]
(где первый элемент каждого подсписка - номер поля, а второй - значение)
Я попытался перебрать этот список правил, чтобы накопить лямбда-выражение:
for field, value in args.send["fields_filter"]:
if matchers["send"] == None:
matchers["send"] = lambda fix : field in fix and fix[field] == value
else:
matchers["send"] = lambda fix : field in fix and fix[field] == value and matchers["send"](fix)
Когда я запускаю программу, я получаю вывод:
RuntimeError: maximum recursion depth exceeded in cmp
Лямбды имеют позднюю привязку?Так относится ли это ко всем идентификаторам в выражении или только к тем, которые передаются в качестве аргументов?Кажется, первое верно
Каков наилучший способ достижения этой функциональности?Я чувствую, что сейчас поступаю неправильно.Может быть, это неправильное использование лямбда-выражений, но я не знаю лучшей альтернативы для этого.