我有一个经常循环的函数。在其中我想创建一个变量,然后该变量会不断增加。我的问题是,当我在函数内定义它时,它会被新的迭代覆盖,从而使其使用无效。
所以我只想定义它一次,无论它循环多少次。但也许还有另一种解决方案。
我的代码和我的意思是aniTimer:
def animate(self, sprite_array, animation_length_in_s, pos):
aniTimer = ? #How do I define it only once?
ani_len = animation_length_in_s
sprite_len = len(sprite_array) -1
if time.time() >= aniTimer + ani_len:
self.aniCount += 1
aniTimer = time.time()
if self.aniCount > sprite_len:
self.aniCount = 0
我试过这个:
def animate(self, sprite_array, animation_length_in_s, pos):
try:
aniTimer
except NameError:
aniTime = time.time()
ani_len = animation_length_in_s
sprite_len = len(sprite_array) -1
if time.time() >= aniTimer + ani_len:
self.aniCount += 1
aniTimer = time.time()
if self.aniCount > sprite_len:
self.aniCount = 0
我尝试了这个:
def animate(self, sprite_array, animation_length_in_s, pos):
if "aniTimer" not in locals():
aniTime = time.time()
ani_len = animation_length_in_s
sprite_len = len(sprite_array) -1
if time.time() >= aniTimer + ani_len:
self.aniCount += 1
aniTimer = time.time()
if self.aniCount > sprite_len:
self.aniCount = 0
但两种尝试总是会执行。这也让我思考为什么会发生这种情况。应该NameError只出现一次,并且在定义变量之后,它应该位于locals().
另外,全局定义变量会导致局部变量在定义之前就被引用的错误。并将其定义为函数实用程序中的全局变量。
磁力RE
这是一个MRE,具有几乎相同的问题,但具有 variabel timer。该函数将被许多对象调用,因此计时器需要为调用它的每个对象都有一个单独的值。
timer = 0
breaks = 3
looping = True
def test():
while looping:
timer += 1
print(timer)
if timer >= breaks:
print("Print this")
break
test()
胡说叔叔
ITMISS
慕仙森
相关分类