Отлаживать лямбда-функции в Python может быть затруднительно, особенно при их использовании в сложных случаях (например, внутри map, filter, reduce, или в более сложных цепочках вычислений).  Проблема заключается в том, что лямбда-функции анонимны и не имеют явного имени, что усложняет установку точек останова и проверку их состояния с помощью стандартных инструментов отладки.
Вот несколько подходов и техник, которые можно использовать для отладки лямбда-функций:
pdb (Python Debugger) или IDE-интегрированные отладчики (PyCharm, VS Code и т.д.).
      
        # Исходный код с лямбда-функцией:
        numbers = [1, 2, 3, 4, 5]
        squared = map(lambda x: x*x, numbers)
        # Преобразование в именованную функцию для отладки:
        def square(x):
          # Здесь можно установить точку останова и посмотреть значение x
          result = x * x
          return result
        squared = map(square, numbers)
      print():  Временная вставка операторов print() внутри лямбда-функции для вывода значений переменных на консоль. Этот метод подходит для быстрого выяснения проблем, но может быть менее удобным, чем использование отладчика.
      
        numbers = [1, 2, 3, 4, 5]
        squared = map(lambda x: (print(f"Debug: x={x}"), x*x)[1], numbers)
      (print(...), x*x)[1]  для того, чтобы print() выполнился, но возвращалось значение  x*x.  Будьте внимательны к побочным эффектам при использовании print() в лямбда-функциях.
    breakpoint() (Python 3.7+):  Начиная с Python 3.7, можно использовать встроенную функцию breakpoint(). Она запускает интерактивный отладчик (обычно pdb) в том месте, где она вызвана. Это позволяет исследовать состояние программы.
        
        numbers = [1, 2, 3, 4, 5]
        squared = map(lambda x: (breakpoint(), x*x)[1], numbers)
      
        import functools
        def debug(func):
            @functools.wraps(func)
            def wrapper(*args, **kwargs):
                args_repr = [repr(a) for a in args]
                kwargs_repr = [f"{k}={v!r}" for k, v in kwargs.items()]
                signature = ", ".join(args_repr + kwargs_repr)
                print(f"Calling {func.__name__}({signature})")
                result = func(*args, **kwargs)
                print(f"{func.__name__} returned {result!r}")
                return result
            return wrapper
        numbers = [1, 2, 3, 4, 5]
        # Нельзя напрямую декорировать лямбду, присваиваем её переменной
        square = debug(lambda x: x*x)
        squared = map(square, numbers)
      for или функции map) и пошагово выполнять код, наблюдая за значениями переменных.  В некоторых IDE можно даже временно переопределить лямбда-функцию в отладочной сессии.
    Важно: Во время отладки часто приходится менять код, чтобы сделать лямбда-функции более видимыми для отладчика. После завершения отладки рекомендуется вернуть код в исходное состояние (если это необходимо) или, если лямбда-функция оказалась слишком сложной, рассмотреть возможность замены ее на обычную именованную функцию для большей читаемости и удобства отладки в будущем.