Найти - Пользователи
Полная версия: Как можно обойтись без глобального определения переменной?
Начало » Python для новичков » Как можно обойтись без глобального определения переменной?
1
3dpython
Как можно обойтись без глобального определения переменной?
В скрипте происходит вызов функции 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()
odnochlen
lab.after(1000, lambda: timer(a))
Вариант не работает, потому что timer(a) возвращает не функцию и вызвать ее нельзя.
3dpython
Проверил с лямбдой, заработало. Я пока не понимаю почему. Я только начал учится программировать. Я так понимаю тут только вариант с лямбдой сработает?



odnochlen
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
bw
3dpython, алгоритм такой:
1. читаем официальную документацию;
2. гуглим;
3. смотрим исходники и примеры (если есть);
4. добиваемся результата методом тыка;
5. ищем схожие вопросы/ответы на этом форуме;
6. если всё ещй не получается – спрашиваем.

Порядок может быть иной, но это не касается первого и последнего пункта.

А вот нормальный вариант. Кстати, такой стиль задания callback'ов очень распространён. А lambda в Python – есть уродство, лучше про них забыть.
# ...
lab.after(1000, timer, a)
# ...
Глобальная переменная `a` после выполнения `timer` не изменится, это надо понимать.

..bw
FishHook
bw
А lambda в Python – есть уродство, лучше про них забыть.
Херасе!!!
odnochlen
bw
А вот нормальный вариант. Кстати, такой стиль задания callback'ов очень распространён. А lambda в Python – есть уродство, лучше про них забыть.
На эту тему я тему создал.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB