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
非靜態函式,非靜態變數與靜態函式,靜態變數
一 函式 函式的引入可以減少程式的目標 實現程式 的共享。但是,函式呼叫也需要一些時間和空間方面的開銷,因為呼叫函式實際上將程式執行流程轉移到被調函式中,被調函式的程式 執行完後,再返回到呼叫的地方。這種呼叫操作要求呼叫前保護現場並記憶執行的位址,返回後恢復現場,並按原來儲存的位址繼續執行。對於較長...
非靜態函式,非靜態變數與靜態函式,靜態變數
非靜態函式,非靜態變數與靜態函式,靜態變數 一 函式 函式的引入可以減少程式的目標 實現程式 的共享。但是,函式呼叫也需要一些時間和空間方面的開銷,因為呼叫函式實際上將程式執行流程轉移到被調函式中,被調函式的程式 執行完後,再返回到呼叫的地方。這種呼叫操作要求呼叫前保護現場並記憶執行的位址,返回後恢...
靜態變數和函式
c 變數的作用域 區域性變數只在定義它的 塊中可用。靜態變數作用域取決於如何定義 類中宣告的成員變數作用域為整個類 命名空間中宣告的變數作用域為整個命名空間 c 函式的作用域 整個類或整個命名空間,不能是區域性的,所以不能在 塊內定義函式 在函式中宣告的函式引數和變數的儲存持續性為自動,作用域為區域...