lambda i=i: ...
. Это работает, так как дефолтные аргументы функции создаются в момент определения функции. Без этого пайтон будет искать, что подставить на место i
во время вызова функции. Сначала будет смотреть в локальном пространстве имен. А там есть такая переменная со значением 9.