亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

僅在循環函數內創建變量一次

僅在循環函數內創建變量一次

縹緲止盈 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條經驗 獲得超8個贊

如果你想使用全局變量,你可以global aniTime在函數的頂部使用它來在你的函數中使用它

最佳實踐可能是將變量保存在調用函數的循環之外,并且可以將其作為參數傳遞給函數


查看完整回答
反對 回復 2023-12-09
  • 3 回答
  • 0 關注
  • 154 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號