Форум сайта python.su
0
Как можно обойтись без глобального определения переменной?
В скрипте происходит вызов функции timer каждую минуту.
Если эту функцию сделать с аргументом. То возникает ошибка.
from tkinter import * a=0 root=Tk() def timer(): global a a=a+1 lab['text'] = a lab.after(1000, timer) lab=Label(root, text=a) lab.pack() lab.after(1000, timer) root.mainloop()
from tkinter import * a=1 root=Tk() def timer(a): a=a+1 lab['text'] = a lab.after(1000, timer(a)) lab=Label(root, text=a) lab.pack() lab.after(1000, timer(a)) root.mainloop()
Отредактировано 3dpython (Окт. 19, 2012 03:26:17)
Офлайн
14
lab.after(1000, lambda: timer(a))
Офлайн
0
Проверил с лямбдой, заработало. Я пока не понимаю почему. Я только начал учится программировать. Я так понимаю тут только вариант с лямбдой сработает?
Офлайн
14
3dpythonНу, если так:
Я только начал учится пlambda: timer(a)рограммировать
lab.after(1000, lambda: timer(a))
def f(): return timer(a) lab.after(1000, f)
lambda: 1
def f(): return 1
Офлайн
20
3dpython, алгоритм такой:
1. читаем официальную документацию;
2. гуглим;
3. смотрим исходники и примеры (если есть);
4. добиваемся результата методом тыка;
5. ищем схожие вопросы/ответы на этом форуме;
6. если всё ещй не получается – спрашиваем.
Порядок может быть иной, но это не касается первого и последнего пункта.
А вот нормальный вариант. Кстати, такой стиль задания callback'ов очень распространён. А lambda в Python – есть уродство, лучше про них забыть.
# ... lab.after(1000, timer, a) # ...
Отредактировано bw (Окт. 19, 2012 10:11:58)
Офлайн
568
bwХерасе!!!
А lambda в Python – есть уродство, лучше про них забыть.
Офлайн
14
bwНа эту тему я тему создал.
А вот нормальный вариант. Кстати, такой стиль задания callback'ов очень распространён. А lambda в Python – есть уродство, лучше про них забыть.
Офлайн