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

我有一个经常循环的函数。在其中我想创建一个变量,然后该变量会不断增加。我的问题是,当我在函数内定义它时,它会被新的迭代覆盖,从而使其使用无效。


所以我只想定义它一次,无论它循环多少次。但也许还有另一种解决方案。


我的代码和我的意思是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()


缥缈止盈
浏览 105回答 3
3回答

胡说叔叔

尝试将类变量初始化为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.59656741603149209.5965674第二次调用不会改变原来保存的时间。

ITMISS

尝试在任何函数外部定义变量,将其调用到函数中,然后在每次使用后从函数中返回它。var = 1def example(var):    #insert program code    var += 1    return varvar = example(var)这将使每次“example”函数运行时,“var”都会被传递到其中,然后带回并加一。程序运行时每次使用此函数,变量“var”都会加一。在这种情况下,您可以将我用作示例的“var”变量替换为“aniTime”变量,并且您只需在函数之前定义它一次,并且每次调用该函数时它都不会被初始值覆盖。

慕仙森

如果你想使用全局变量,你可以global aniTime在函数的顶部使用它来在你的函数中使用它最佳实践可能是将变量保存在调用函数的循环之外,并且可以将其作为参数传递给函数
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python