1. 程式人生 > 程式設計 >python如何設定靜態變數

python如何設定靜態變數

眾所周知,Python語言並不支援靜態變數,比如下面這樣一個應用場景:

voidfoo(){
staticintcount=0;
count++;
}

在Python中無法自然實現這個功能。換個角度來看這個問題,函式中的靜態變數其實可以看做是函式的一個內部變數,而不是呼叫期間生成的區域性變數。所以這裡介紹一種使用裝飾器的方法給函式新增這樣的內部變數。

defstatic_vars(**kwargs):
defdecorate(func):
forkinkwargs:
setattr(func,k,kwargs[k])
returnfunc
returndecorate

這是一個Python裝飾器,通過@語法呼叫,在一個函式外層再包裹一層,這裡相當於給函式新增內部變數。可以這樣來使用這個裝飾器,比如我們想實現上面的想法,在foo函式中新增一個計數器,有

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

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

例項擴充套件:

這裡使用靜態變數目的是在類中實現一個靜態的佇列,這裡用陣列實現,任何時候插入到佇列中的資料不會和類的例項有直接關係

__author__ = 'Administrator'
class CaptchaImage:
 def queue(self,arr=list()):
  return arr
 def InsertCode(self,code):
  self.queue().append(code)
if __name__=='__main__':
 c = CaptchaImage()
 c.InsertCode(1)
 b=CaptchaImage()
 b.InsertCode(2)
 print(b.queue())
 print(c.queue())

程式碼執行輸出結果為:

[1,2]
[1,2]

到此這篇關於python如何設定靜態變數的文章就介紹到這了,更多相關python設定靜態變數內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!