Лямбда-итерация Python не работает должным образом

В приведенном ниже коде я намереваюсь иметь две кнопки, и когда каждое нажатие «0» и «1» должны быть напечатаны на стандартный вывод, соответственно. Однако, когда программа запускается, они оба печатают «1», что является последним значением, которое у меня было для итерации. Зачем?

import Tkinter as tk import sys root = tk.Tk() for i in range(0,2): cmd = lambda: sys.stdout.write(str(i)) tk.Button(text="print '%d'" % i,command=cmd).pack() root.mainloop() 

  • Доступ к переменной внутри метода класса
  • Windows думает, что tkinter не отвечает
  • time.sleep () Эквивалент на Tkinter
  • Как обработать событие закрытия окна в Tkinter?
  • Tkinter: рисовать прямоугольник с помощью мыши
  • Запуск matplotlib в tkinter
  • Ошибка matplotlib - нет модуля с именем tkinter
  • Установить tkinter и python локально
  • 3 Solutions collect form web for “Лямбда-итерация Python не работает должным образом”

    i не захвачен в лямбда, когда вы его создаете (как хотите). Вместо этого обе функции ссылаются на i во внешнем цикле, который изменяется после создания функции и перед ее запуском. Чтобы захватить его, вы можете использовать значение по умолчанию:

     for i in range(0,2): cmd = lambda i=i: sys.stdout.write(str(i)) tk.Button(text="print '%d'" % i,command=cmd).pack() 

    Конечно, это проблема в

    О лямбдах, захвате и изменчивости

    это снова и снова …

    Я думаю, что немного странно использовать анонимную функцию, чтобы потом дать ей имя. Почему бы не написать так?

     for i in 0,1: def cmd(): return sys.stdout.write(str(i)) tk.Button(text="print '%d'"%i, command=cmd).pack() 
    Interesting Posts

    Интерактивный сюжет, основанный на Tkinter и matplotlib

    Easy_install и Pip не работают

    Как использовать youtube-dl из программы python

    обтекание срезов в Python / numpy

    Как читать изображение из StringIO в PIL в python

    «Setup.py upload» не работает с «Ошибка загрузки» (401): вы должны быть идентифицированы для редактирования информации о пакете »

    Какой модуль статистики для python поддерживает один способ ANOVA с пост-hoc-тестами (Tukey, Scheffe или другой)?

    Как конкатенировать два элемента списка в Python?

    Возвращает элемент DataFrame с использованием частичного совпадения строк в строках pandas python

    Несоответствие множественного наследования метакласса

    Лучший способ получить питон и метеорный разговор

    Как печатать на консоли в Py Test?

    Различия между модулем подпроцесса, посланником, sarge и pexpect?

    Не удалось отправить письмо с примером Python

    Как использовать запросы Модуль Python для создания завихренных вызовов

    Python - лучший язык программирования в мире.