Как передать глобальную переменную в лямбда-выражение?

Как можно передать переменную `sending` из внешнего цикла цикла `for` в лямбда-выражение внутри `scheduler.add_job()` и гарантировать сохранение значения для каждой итерации без необходимости обертывания цикла в функцию? Цель - добавить задач для каждого элемента `launched_letters_sendings` без потери значения переменной `sending` для каждой задачи.
  • 13 июля 2024 г. 10:02
Ответы на вопрос 1
Для передачи глобальной переменной в лямбда-выражение в Python можно воспользоваться параметром `sending` в качестве аргумента по умолчанию. Например:

```python
from apscheduler.schedulers.background import BackgroundScheduler

sending = "example"

scheduler = BackgroundScheduler()

launched_letters_sendings = ["A", "B", "C"]

for sending in launched_letters_sendings:
    scheduler.add_job(lambda sending=sending: print(f"Sending letter {sending} to recipient"), trigger='date')

scheduler.start()
```

В данном случае, мы передаем значение `sending` в лямбда-выражение как аргумент по умолчанию. Таким образом, каждая задача, добавленная в `scheduler` будет иметь доступ к значению `sending` на момент добавления задачи, сохраняя его для каждой задачи отдельно.

Таким образом, каждая задача в `scheduler` будет использовать значение `sending`, соответствующее элементу `launched_letters_sendings`, без необходимости оборачивания цикла в функцию.
Похожие вопросы