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