在 C/C 中,靜態變數在跨函數呼叫保留值方面發揮著至關重要的作用。然而,Python 不具有與此概念明確等效的概念。因此,我們如何在 Python 函數中有效地實作靜態變數?
Python 的慣用方法涉及操作類別級變數。這可以透過定義一個封裝函數及其關聯狀態的類別來實現。但是,在不希望使用類別的情況下,必須採用替代方法。
一種解決方法涉及利用函數的命名空間,如下所示:
def foo(): if not hasattr(foo, "counter"): foo.counter = 0 foo.counter += 1 print("Counter is %d" % foo.counter)
此程式碼片段定義了一個計數器函數的命名空間,確保它在呼叫中持續存在。但是,它需要在第一次呼叫時明確初始化。
為了更簡潔和客製化的方法,可以使用裝飾器。以下裝飾器建立靜態變數並根據指定的關鍵字參數初始化它們:
def static_vars(**kwargs): def decorate(func): for k in kwargs: setattr(func, k, kwargs[k]) return func return decorate
可以如下使用此裝飾器:
@static_vars(counter=0) def foo(): foo.counter += 1 print("Counter is %d" % foo.counter)
透過利用此裝飾器,計數器初始化程式碼可以放在函數定義的頂部,提供更直覺和可讀的實作。
以上是我們如何在 Python 函數中模擬靜態變數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!