Python函式的靜態變數

2021-09-07 16:01:06 字數 1010 閱讀 9071

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 函式的作用域 整個類或整個命名空間,不能是區域性的,所以不能在 塊內定義函式 在函式中宣告的函式引數和變數的儲存持續性為自動,作用域為區域...