Я не могу заставить кнопку перезапуска работать на моем секундомере. Использование Pythonista на iPhone

import ui
from time import *
start = int(time())
def stop_time(sender):
    finish = int(time())
    total_time = int(finish - start)
    button1 = str("Your time is %i seconds." % (total_time))
    sender.title = None
    sender.title = str(button1)

Как разрешить кнопке перезагрузки изменить переменную запуска?

def restart_time(sender):
    start = int(time())
    button2 = str("Stopwatch restarted.")
    sender.title = None
    sender.title = str(button2)
ui.load_view('stop_time').present('sheet')

1 ответ

Решение

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

def restart_time(sender):
    global start
    start = int(time())
    button2 = str("Stopwatch restarted.")
    sender.title = None
    sender.title = str(button2)

Из соответствующей записи в Python FAQ:

В Python переменные, на которые ссылаются только внутри функции, неявно глобальны. Если переменной в любом месте внутри тела функции назначается новое значение, оно считается локальным. Если переменной когда-либо присваивается новое значение внутри функции, переменная неявно является локальной, и вам необходимо явно объявить ее как "глобальную".

Другие вопросы по тегам