Suppose I have a global variable time
that is incremented by 1 unit with every update of the window according to some FPS (for example in Pygame). Then suppose I have another variable defined in terms of time
, like this:
def function(): global time t = time // 3 final = t + 100 if t < final: pass else: pass
The behavior I want is that the variable final
stores the value of t
just when the function is first called and then final
becomes a constant, while t
keeps running together with time
. So, final
would not always be 100 ahead of t
, which is what happens, but would be 100 ahead of t
just when the function first captures t
and then would keep that number unchanged. How can that be done?
Advertisement
Answer
You can make final
global and check if it has been set.
final = None def function(): global time, final t = time // 3 if not final: final = t + 100 # update once if t < final: pass else: pass
You can also create an attribute on the function itself.
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()
Output
103 103 103