lambda функции в асинхронном проекте
Можно ли безопасно использовать lambda-функции в асинхронном многопользовательском телеграм боте?
Ответы (2 шт):
Lambda функции - это просто анонимные функции в PY и они не представляют угрозы как и любые другие функции, но исключения могут быть к примеру когда лямбда функции замыкают измененные переменные. Но у них так же и минусы есть - нельзя передавать между процессами, нельзя сохранять в очереди, нельзя использовать await и так далее. Смотря что вы подразумеваете под вопросом "а безопасно ли?", если есть возможность их избежать - избегайте, всё зависит от ваших задач и понимания устройства функций в PY.
По поводу замыкания переменной в lambda функциях.
arr = []
for i in range(3):
arr.append(lambda: i)
print([a() for a in arr])
в этом примере lambda функции ссылаются на одну и ту же переменную i (счетчик цикла) и в результате мы получим массив [2, 2, 2]
Чтобы обойти замыкание, мы можем привязывать текущее значение i, как значение по умолчанию в параметр функции:
arr = []
for i in range(3):
arr.append(lambda i=i : i)
print([a() for a in arr])
и в результате получим массив [0, 1, 2]