全域性變數 變數 區域性變數和全域性變數

2021-10-25 12:26:16 字數 1882 閱讀 2517

在python中,變數是表示(或指向)特定值的名稱。

例如,我們可能想使用名稱a來表示2,為此執行下列**:

這稱為賦值(assignment),將值2賦給了變數a。也就是變數a與值(或物件)2關聯起來。

給變數賦值後,就可以在表示式中使用它。例如:

注意:在使用python變數前,必須先給它賦值,而且,變數名稱只能由字母、數字和下劃線組成,並且不能以數字開頭;

另外python中的關鍵字和函式名不能作為變數名使用

用關鍵字做變數名會報錯,用函式名做變數名不會報錯,但是一旦用函式名定義變數,函式將失去原來的函式作用,變成單純的變數名稱,這時候需要刪除變數才能恢復函式名稱原來的函式作用

函式有兩種連線變數的方式:全域性和區域性。這裡的全域性和區域性是相對於單個的自定義函式而言的。全域性變數的作用域(命名空間)是全域性,而區域性變數的作用域(命名空間)僅限於單個的自定義函式內部。

例:

變數a在函式test1內部進行的賦值,所以a的作用域僅限於test1函式內部,a為區域性變數

區域性作用域在函式被呼叫時生成,並立即由函式的引數填充,一般情況下,當函式執行結束後,區域性作用域就會被登出。所以,區域性變數a在test1函式退出時就被登出了,在函式外部呼叫a的時候會報錯。

變數b在函式test2外部進行的賦值,所以b的作用域不僅限於test2內部,b為全域性變數

那麼,新的問題來了,如果在自定函式的時候,既有全域性變數,又有區域性變數,而且全域性變數名稱和區域性變數名稱相同,這種情況會產生什麼樣的結果呢?

區域性變數和全域性變數重名,如果函式內部有區域性變數,函式呼叫的是自己內部的區域性變數;如果函式內部沒有定義區域性變數,函式呼叫的是函式外部同名的全域性變數。

出現乙個新的需求,能否在函式內部對全域性變數進行修改?

通過global關鍵字在函式內部對全域性變數進行修改

global關鍵字的本質作用是把區域性變數轉化成全域性變數,在沒有定義全域性變數的情況下來看會更明顯的顯示global關鍵字的作用

修改全域性變數的乙個陷阱

表面上看沒有通過global關鍵字就改變了全域性變數,真實情況也是這樣的嗎?

其實並不是這樣的!一開始對變數名稱的定義就說明了,變數是指向了值,其本質是「值的乙個引用」,而不是「變數的取值」。所以,上邊**雖然顯示全域性變數是從[1]變到了[1,1],實際上全域性變數的指向並沒有發生變化,能看到前後指向的id是一樣的!發生變化的原因在於定義的全域性變數是可變的資料型別而已!

全域性變數 靜態全域性變數 靜態區域性變數 區域性變數

全域性和靜態變數都在堆裡。這句話應該錯了,應該是放在常量資料段 全域性變數的作用範圍是整個程式 如果程式是多個檔案,必須在其他的檔案中說明 靜態變數的作用範圍要看靜態變數的位置,如果在函式裡,則作用範圍 就是這個函式。靜態全域性變數,只在本檔案可以用,雖然整個程式包含多個檔案,但靜態全域性變數只能用...

全域性變數 靜態全域性變數 靜態區域性變數 區域性變數

全域性和靜態變數都在堆裡。全域性變數的作用範圍是整個程式 如果程式是多個檔案,必須在其他的檔案中說明 靜態變數的作用範圍要看靜態變數的位置,如果在函式裡,則作用範圍 就是這個函式。靜態全域性變數,只在本檔案可以用,雖然整個程式包含多個檔案,但靜態全域性變數只能用在定義它的那個檔案裡,卻不能用在程式中...

全域性變數 靜態全域性變數區域性變數 靜態區域性變數

對於乙個完整的程式,在記憶體中的分布情況如下圖 區 low address 全域性資料區 堆區 棧區 high address 一般程式把新產生的動態資料存放在堆區,函式內部的自動變數存放在棧區。自動變數一般會隨著函式的退出而釋放空間,靜態資料 即使是函式內部的靜態區域性變數 也存放在全域性資料區。...