python局部静态变量_全局变量、局部变量和静态变量
全局變量和局部變量在寫代碼時需要區(qū)分清楚,不然會出大問題。不同語言定義不同范圍的變量的寫法有很大的區(qū)別。
那么靜態(tài)變量是在什么場景下用到呢?我們來假設(shè)這樣一個場景:在函數(shù)內(nèi)部定義的變量,當(dāng)程序執(zhí)行到它的定義處時,編譯器為它在棧上分配空間,函數(shù)在棧上分配的空間在此函數(shù)執(zhí)行結(jié)束時會釋放掉,這樣就產(chǎn)生了一個問題: 如果想將函數(shù)中此變量的值保存至下一次調(diào)用時,如何實現(xiàn)? 最容易想到的方法是定義為全局的變量,但定義一個全局變量有許多缺點,最明顯的缺點是破壞了此變量的訪問范圍(使得在此函數(shù)中定義的變量,不僅僅只受此函數(shù)控制)。static關(guān)鍵字則可以很好的解決這個問題。另外,在C++和java中,需要一個數(shù)據(jù)對象為整個類而非某個對象服務(wù),同時又力求不破壞類的封裝性,即要求此成員隱藏在類的內(nèi)部,對外不可見時,可將其定義為靜態(tài)數(shù)據(jù)。
在c中,靜態(tài)全局變量和全局變量的區(qū)別在于,全局變量其他文件可以訪問,但是靜態(tài)全局變量只能被當(dāng)前文件中的函數(shù)訪問。
c/c++的寫法
int globalVar = 1; //全局變量static int staticVar = 2; //靜態(tài)全局變量
void VarDemo() {
int localVar = 3; //局部變量 static int staticVar2 = 4; //仍然為局部變量 printf("globalVar=%d\n" + globalVar);
printf("staticVar=%d\n" + staticVar);
printf("localVar=%d\n" + localVar);
}
java的寫法
class HelloWorld{
public int globalVar = 1;
public static int staticVar = 2;
public static void main(String[] args) {
int localVar = 3;
System.out.println("localVar="+String.valueOf(localVar));
System.out.println("staticVar="+String.valueOf(staticVar));
}
}
go的寫法
var globalVar int=0 //只能被本包內(nèi)函數(shù)訪問的全局變量var GlobalVar int = 1 //可以在任何包內(nèi)被訪問的全局變量
func varDemo() {
localVar := 2 //局部變量fmt.Println("globalVar=", globalVar)
fmt.Println("GlobalVar=", GlobalVar)
fmt.Println("localVar=", localVar)
}
func main() {
varDemo()
}
python的寫法
global_var = 1 # 定義全局變量
def var_demo():
local_var = 2 # 定義局部變量
print("global_var=", global_var)
print("local_var=", local_var)
if __name__ == "__main__":
var_demo()
總結(jié)對比:
1. 一般情況下全局變量定義函數(shù)外,局部變量定義函數(shù)內(nèi);全局變量作用范圍是全局,局部變量作用范圍在函數(shù)內(nèi);
2. 靜態(tài)變量定義在函數(shù)外,則為靜態(tài)全局變量,作用范圍為當(dāng)前文件;定義在函數(shù)內(nèi),則為局部靜態(tài)變量,作用范圍同局部變量;
3. 如果在全局范圍要經(jīng)常用到某個值,則設(shè)置為靜態(tài)變量,否則定義為普通全局變量即可;
4. c、c++和java可以定義靜態(tài)變量,go和python不能定義靜態(tài)變量;
5. go的全局變量有兩種,一種是可以在包內(nèi)被訪問的,一種是在其他包內(nèi)也可以被訪問的,區(qū)別在于后一種全局變量的首字母為答謝,前一種為小寫;
總結(jié)
以上是生活随笔為你收集整理的python局部静态变量_全局变量、局部变量和静态变量的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: FishC笔记—14 讲 字符串:各种奇
- 下一篇: 基于python的表情识别_python