Фиксация значения переменной, которая изменяется в терминах другой

#python

#python

Вопрос:

Предположим, у меня есть глобальная переменная time , которая увеличивается на 1 единицу при каждом обновлении окна в соответствии с некоторым FPS (например, в Pygame). Тогда предположим, что у меня есть другая переменная, определенная в терминах time , например:

 def function():
    global time

    t = time // 3
    final = t   100
    
    if t < final:
        pass
    else:
        pass
  

Поведение, которое я хочу, заключается в том, что переменная final сохраняет значение t только при первом вызове функции, а затем final становится константой, t продолжая работать вместе с. time Таким образом, final не всегда будет на 100 впереди t , что и происходит, но будет на 100 впереди t только тогда, когда функция сначала захватывает t , а затем сохраняет это число неизменным. Как это можно сделать?

Ответ №1:

Вы можете сделать final глобальным и проверить, было ли оно установлено.

 final = None
def function():
    global time, final

    t = time // 3
    if not final: final = t   100  # update once
    
    if t < final:
        pass
    else:
        pass
  

Вы также можете создать атрибут для самой функции.

 def func():
    global time

    t = time // 3
    if not 'final' in dir(func): func.final = t   100  # update once
    
    print(func.final)
    
    if t < func.final:
        pass
    else:
        pass

time=10
func()
time=20
func()
time=30
func()
  

Вывод

 103
103
103
  

Комментарии:

1. Хорошо, это работает, но я думаю, что эта новая глобальная переменная ограничит меня, когда я буду обобщать некоторые вещи.

2. Без глобальной переменной вам нужно будет перейти final в функцию и вернуть обновленное значение

3. Вы также можете прикрепить атрибут к функции. Ответ обновлен.