在Python 中,模仿函數內靜態變數的行為(如C/C 等語言所示),最初可能看起來像是令人困惑的任務。但是,有多種方法可以實現此功能。
一種解決方案涉及利用函數本身的命名空間。透過為函數物件指派一個屬性,我們可以在其範圍內有效地建立一個靜態變數。考慮以下程式碼:
def foo(): foo.counter += 1 print("Counter is %d" % foo.counter) foo.counter = 0
此方法在函數外部初始化計數器變數並將其指派給函數物件的命名空間。因此,每次呼叫 foo() 都會使計數器遞增 1,即使在多次呼叫中也能保持其狀態。
或者,您可以使用裝飾器函數來自動建立靜態變數。以下裝飾器static_vars() 接受關鍵字參數並將它們設為裝飾函數的屬性:
def static_vars(**kwargs): def decorate(func): for k in kwargs: setattr(func, k, kwargs[k]) return func return decorate
使用此裝飾器,您可以編寫foo() 函數,如下所示:
@static_vars(counter=0) def foo(): foo.counter += 1 print("Counter is %d" % foo.counter)
裝飾器確保計數器變數初始化一次並保持與foo() 函數關聯。
而這些方法在函數層級有效地模擬靜態變量,值得注意的是,與 C/C 不同,Python 函數不會綁定到特定的物件實例。因此,foo.在存取靜態變數時需要前綴,因為它仍然與函數物件本身相關聯。
以上是如何在Python函數中實作靜態變數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!