По умолчанию, когда вы копируете / вставляете данные из окна запроса в SSMS, они не копируют заголовки столбцов. я был преобразован в словарную форму) - я проверяю числовую версию поля (в скобках), а не английскую версию:
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
Лямбды имеют позднюю привязку? Так относится ли это ко всем идентификаторам в выражении или только к тем, которые передаются в качестве аргументов? Кажется, первое верно
. Как лучше всего реализовать эту функциональность? Я чувствую, что сейчас поступаю неправильно. Может быть, это плохое использование лямбда-выражений, но я не знаю лучшей альтернативы для этого.