python使用函式預設值來實現函式靜態變數的功能

2021-07-08 17:54:37 字數 1425 閱讀 7784

今天嘗試python平行計算,想利用靜態變數計數,從而知道函式被執行了幾次

python本身是不支援靜態變數的,但是我們可以通過函式的預設值來實現靜態變數的功能。 

當函式的預設值是內容是可變的類時,類的內容可變,而類的名字沒變。(相當於開闢的記憶體區域沒有變,而其中內容可以變化)。 

這是因為python中函式的預設值只會被執行一次,(和靜態變數一樣,靜態變數初始化也是被執行一次。)這就是她們的共同點。

deff(a, l=):

returnl

printf(1)

printf(2)

printf(3)

printf(4,['x'])

printf(5)

他的輸出是: 

[1]

[1,2]

[1,2,3]

['x',4]

[1,2,3,5]

前面的好理解,為什麼最後 「print f(5)」的輸出是 「[1, 2, 3, 5]」呢? 

這是因為 「print f(4,['x'])」時,預設變數並沒有被改變,因為預設變數的初始化只是被執行了一次(第一次使用預設值呼叫),初始化執行開闢的記憶體區(我們可以稱之為預設變數)沒有被改變,所以最後的輸出結果是「[1, 2, 3, 5]」。 

lua 函式 預設值 定義函式引數的預設值

如果你想要命名引數和預設值,如php或python,你可以使用表構造函式呼叫你的函式 myfunction 函式本身可以有這樣的簽名 function myfunction t setmetatable t,local a,c t 1 or t.a,t 2 or t.b,t 3 or t.c fun...

函式(引數,預設值)

js定義函式引數沒有非常嚴格的要求,可以有也可以沒有,在呼叫的時候也是,引數可以有可以沒有,也可以和定義時的引數個數不一致 沒有給count傳入引數,預設為10 也可以直接在引數中給count賦值 但是特別注意的是不能給count傳入0,因為0與undefined都是false,因此count傳入的...

Swift 函式預設值

在 swift 中,函式的內部引數標籤不會用來區分函式,另外引數是可以指定預設值的。如下函式 func alert message string,cancelhandler uialertaction void nil,confirmhandler uialertaction void nil 作為...