Змея / Говнокод #7544 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
# разбираюсь с питоном, может растолкуете почему так
>>> z = [lambda: i for i in [1,2,3]]
# почему вот такой результат?
>>> z[0](), z[1](), z[2]()
(3, 3, 3) 

# каждый элемент списка - отдельная функция
>>> z[0] == z[1], z[0] is z[1]
(False, False)

# вот таким образом выходит правильно.
>>> z = [lambda: 1, lambda: 2, lambda:3]
>>> z[0](), z[1](), z[2]()
(1, 2, 3)

Автор - я. Меня действительно интересует, почему так происходит.

Запостил: Fai Fai, (Updated )

Комментарии (14) RSS

  • Неужели тут все такие тупые? Только комментировать умеете?
    Ответить
      • Да не троллю я, я действительно не знаю почему так происходит и как нужно делать.
        Ответить
    • твои 3 лямбды возвращает i, которые в конце цикла = 3.

      а во втором случае 3 отдельных лямбды и каждая возвращает своё
      Ответить
      • Это может оказаться грязным хаком. Вроде был ещё способ, но я его сейчас уже не вспомню.
        Ответить
        • Странно что нет другого способа создать лямбда функцию, которая затем не будет зависеть от переменной.
          Ответить
  • так:
    z = [lambda i=i:i for i in [1,2,3]]

    или так:
    z = map(lambda i: lambda: i, [1,2,3])
    Ответить

Добавить комментарий

Из-за тебя ушел bormand, guest!

    А не использовать ли нам bbcode?


    8