为了账号安全,请及时绑定邮箱和手机立即绑定

仅在循环函数内创建变量一次

仅在循环函数内创建变量一次

缥缈止盈 2023-12-09 16:52:53
我有一个经常循环的函数。在其中我想创建一个变量,然后该变量会不断增加。我的问题是,当我在函数内定义它时,它会被新的迭代覆盖,从而使其使用无效。所以我只想定义它一次,无论它循环多少次。但也许还有另一种解决方案。我的代码和我的意思是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 = 0breaks = 3looping = Truedef test():        while looping:        timer += 1        print(timer)        if timer >= breaks:            print("Print this")            breaktest()
查看完整描述

3 回答

?
胡说叔叔

TA贡献1804条经验 获得超8个赞

尝试将类变量初始化为None. 这是 Python 中的标准习语,在许多其他语言中也有直接同源词。


导入时间


class Foo():


    aniTime = None


    def animate(self):

        if Foo.aniTime is None:

            Foo.aniTime = time.time()


food = Foo()

food.animate()

print(food.aniTime)

time.sleep(2)

 

fool = Foo()

fool.animate()

print(fool.aniTime)

输出:


1603149209.5965674

1603149209.5965674

第二次调用不会改变原来保存的时间。


查看完整回答
反对 回复 2023-12-09
?
ITMISS

TA贡献1871条经验 获得超8个赞

尝试在任何函数外部定义变量,将其调用到函数中,然后在每次使用后从函数中返回它。


var = 1


def example(var):

    #insert program code

    var += 1

    return var


var = example(var)

这将使每次“example”函数运行时,“var”都会被传递到其中,然后带回并加一。程序运行时每次使用此函数,变量“var”都会加一。


在这种情况下,您可以将我用作示例的“var”变量替换为“aniTime”变量,并且您只需在函数之前定义它一次,并且每次调用该函数时它都不会被初始值覆盖。


查看完整回答
反对 回复 2023-12-09
?
慕仙森

TA贡献1827条经验 获得超7个赞

如果你想使用全局变量,你可以global aniTime在函数的顶部使用它来在你的函数中使用它

最佳实践可能是将变量保存在调用函数的循环之外,并且可以将其作为参数传递给函数


查看完整回答
反对 回复 2023-12-09
  • 3 回答
  • 0 关注
  • 104 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信