如何在Python中定義靜態變量

眾所周知,Python語言并不支持靜態變量,比如下面這樣一個應用場景

void foo() {
    static int count = 0;
    count ++;
}

在Python中無法自然實現這個功能。換個角度來看這個問題,函數中的靜態變量其實可以看做是函數的一個內部變量,而不是調用期間生成的局部變量。所以這里介紹一種使用裝飾器的方法給函數添加這樣的內部變量。

def static_vars(**kwargs):
    def decorate(func):
        for k in kwargs:
            setattr(func, k, kwargs[k])
        return func
    return decorate

這是一個Python裝飾器,通過@語法調用,在一個函數外層再包裹一層,這里相當于給函數添加內部變量。可以這樣來使用這個裝飾器,比如我們想實現上面的想法,在foo函數中添加一個計數器,有

@static_vars(counter = 0)
def foo():
    foo.counter += 1

其實如果一定要通過內部變量來實現靜態的效果,可以直接定義類來達到,但是裝飾器將很多細節略去,而且通過**kwargs可以添加任意類型,任意數目,實現起來相對簡單。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Python進階框架 希望大家喜歡,點贊哦首先感謝廖雪峰老師對于該課程的講解 一、函數式編程 1.1 函數式編程簡...
    Gaolex閱讀 5,517評論 6 53
  • 兩本不錯的書: 《Python參考手冊》:對Python各個標準模塊,特性介紹的比較詳細。 《Python核心編程...
    靜熙老師哈哈哈閱讀 3,385評論 0 80
  • 所謂“燈彩”,就是人們通常在傳統節日、吉祥喜慶之時所張掛的彩燈。由于這些彩燈在形狀、色彩以及燈火等方面常呈五顏六色...
    細雪飄閱讀 2,125評論 0 3
  • 我從未想過,國家層面頒布的政策,會在個人的身上激起這么迅速、這么強烈地反應。 2014的11月,如同往年的秋天,微...
    DarlingSmile的小徐閱讀 276評論 6 4
  • 從今天開始,寫寫東西,看看,當年那個自己是否還在。 小碗出生在一個小山村里,母親告訴她,她是七個月的早產兒,所以生...
    候夜人閱讀 325評論 0 0