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