Python函數的靜態變量


C語言中,在函數內部可以定義static類型的變量,這個變量是屬於這個函數的全局對象。在Python中也可以實現這樣的機制。

def f():
    if not hasattr(f, 'x'):
        f.x = 0
    print(f.x)
    f.x+=1


f()#輸出1
f()#輸出2

類中可以有函數,類中可以有類,函數中可以有類,函數中也可以有函數。

函數中的類是每次都要加載的。

def f():
    class haha:
        cnt=1
        def __init__(self):
            print("haha"*haha.cnt)
            haha.cnt+=1
    if not hasattr(f, 'x'):
        f.x = 0
    x=haha()#定義一個haha類型的變量
    print(f.x)
    f.x+=1


f()#輸出0和haha
f()#輸出1和haha

在函數f()內部定義了一種類型haha,haha有一個靜態變量cnt。每次執行函數f()都要對haha類型進行加載(也就是初始化類型的靜態變量)
可以用如下方式實現保持每次調用f()函數使用同一個haha。

def f():
    class haha:
        cnt=1
        def __init__(self):
            print("haha"*haha.cnt)
            haha.cnt+=1
    if not hasattr(f, 'x'):
        f.x = 0
    if not hasattr(f,'ha'):
        f.ha=haha
    print(f.x)
    f.ha()
    f.x+=1


f()#輸出0和haha
f()#輸出1和hahahaha


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM