我正在嘗試清理一些邏輯并洗掉一些代碼中的重復值,并且正在尋找一種方法來引入一些非常簡單的延遲加載來處理設定變數。可以這樣作業的東西:
FOO = {'foo': 1}
BAR = {'test': FOO['foo'] }
# ...complex logic here which ultimately updates the value of Foo['foo']...
FOO['foo'] = 2
print(BAR['test']) # Outputs 1 but would like to get 2
更新:
根據最初的回答,我的問題可能還不清楚。我正在尋找用延遲加載的替代品替換testin中設定的值。BAR我知道一種方法可以做到這一點,但它似乎不必要地復雜,我想知道是否有更簡單的方法。
uj5u.com熱心網友回復:
您可以嘗試使用 lambda 并在回傳時呼叫該值。像這樣:
FOO = {'foo': 1}
BAR = {'test': lambda: FOO['foo'] }
FOO['foo'] = 2
print(BAR['test']()) # Outputs 2
uj5u.com熱心網友回復:
如果你的深度只有一層,不妨試試ChainMap,例如,
>>> from collections import ChainMap
>>> defaults = {'foo': 42}
>>> myvalues = {}
>>> result = ChainMap(myvalues, defaults)
>>> result['foo']
42
>>> defaults['foo'] = 99
>>> result['foo']
99
uj5u.com熱心網友回復:
當你這樣做時,
BAR = {'test': FOO['foo'] }
它評估并從 FOO 獲取值,因此BAR將變為{'test': 1}.
因此,您需要了解BAR不持有任何對FOO. 因此,任何更改FOO都不會影響BAR.
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/518166.html
