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

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

在 Python 中交替使用類/全局變量和閉包

在 Python 中交替使用類/全局變量和閉包

阿晨1998 2023-06-20 10:30:52
我遇到了 python 中的閉包,并且我一直在圍繞這個主題進行修補。如果我在這里錯了,請糾正我,但我對何時使用閉包(通常)的理解是它可以用作小類 ( q1) 的替代品并避免使用全局變量 ( q2)。Q1: [replacing classes]從該類創建的任何實例都datafactory將擁有自己的數據列表,因此每次附加到該對象的列表都會導致增量行為。我了解 OO POV 的輸出。class datafactory():    def __init__(self):        self.data = []    def __call__(self, val):        self.data.append(val)        _sum = sum(self.data)        return _sumincrementwith = datafactory()print(incrementwith(1))print(incrementwith(1))print(incrementwith(2))OUTPUT: 124我嘗試用閉包替換它,它成功了,但我對為什么/如何發生這種情況的理解有點模糊。def data_factory():    data = []    def increment(val):        data.append(val)        _sum = sum(data)        return _sum    return incrementincrement_with = data_factory()print(increment_with(1))print(increment_with(1))print(increment_with(2))OUTPUT:124我得到的是返回嵌套函數data_factory的函數定義以及一起發送的變量,如果它是這樣的,我會理解輸出:incrementdata112但是這個data列表究竟是如何在每次調用中都持續存在的呢?函數中定義的變量不應該在函數完成執行后消失,并在下一次 fn 調用時重新生成和清除嗎?注意:我知道這種行為通常存在于使用默認參數定義的函數中,例如def func(val, l = []):在每次 fn 調用時不會清除列表,而是使用新元素/附加更新,這也是我不完全理解的.我真的很感激對這兩種情況(OO 和閉包)中發生的事情進行學術解釋。Q2: [replacing use of global]有沒有一種方法可以在不使用全局變量或返回語句的情況下使用閉包來增加以下變量?a = 0print("Before:", a) # Before: 0def inc(a):    a += 1print("After:", a) # After: 0感謝您的時間。
查看完整描述

目前暫無任何回答

  • 0 回答
  • 0 關注
  • 141 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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