區域性變數和全域性變數

2021-08-29 00:02:33 字數 3159 閱讀 7194

一、基礎

在子程式中定義的變數稱為區域性變數,在程式一開始定義的變數稱為全域性變數。

例1:

name =

"qwer"

def change_name()

: name =

"asd"

print

('change_name'

,name)

change_name()

print

(name)

輸出結果:

change_name asd

qwer

同樣是輸出name,為什麼兩個不一樣呢?這是因為函式裡面的name是區域性變數,開始定義的name是全域性變數,區域性變數只在函式裡面生效,最後一行輸出的name輸出的是全域性變數

下面我們用一張圖來表明全域性變數和區域性變數兩者之間的關係:

由上圖我們可以看出,區域性變數存在私密空間內;而全域性變數則是所有人都可以拿到的東西。

要是我們想把區域性變數變為全域性變數,或者在函式內直接影響到全域性變數,我們可以使用golbal質量

name =

"qwer"

def change_name()

: golbal name =

"asd"

print

('change_name'

,name)

change_name()

print

(name)

輸出結果:

change_name asd

asd

由上面的例子我們可以得出,如果函式的內容無golbal關鍵字,我們只能讀取全域性變數,無法重新賦值

如果函式中有golbal關鍵字,變數本質上就是全域性的那個變數,可讀取可賦值

為了方便區分,全域性變數可用大寫,區域性變數可用小寫

二、判斷執行順序

通過全域性變數和區域性變數的學習,可以用這些判斷函式執行順序

例1:

name

="zf"

def shunxu1()

: name =

"zhaoyun"

print

(name)

def shunxu2()

: name =

"zhangfei"

print

(name)

def shunxu3()

: name =

"liubei"

print

(name)

def shunxu4()

: name =

"lvbu"

print

(name)

shunxu4()

print

(name)

shunxu3()

print

(name)

shunxu2()

print

(name)

shunxu1()

輸出結果:

zhaoyun

zhangfei

liubei

lvbu

liubei

zhangfei

zhaoyun

為上面的函式執行順序標號,1、2、3…,結果如下:

name = 「zf」 1

def shunxu1() :

name = 「zhaoyun」 3

print(name) 4

def shunxu2():

name = 「zhangfei」 6

print(name) 7

def shunxu3():

name =「liubei」 9

print(name) 10

def shunxu4():

name = 「lvbu」 12

print(name) 13

shunxu4() 11

print(name) 12

shunxu3() 8

print(name) 13

shunxu2() 5

print(name) 14

shunxu1() 2

裡面每個name是哪個,請讀者自行體會

三、風濕理論之函式即變數

例1:def foo()

:print

('from foo'

)bar

()

報錯,原因:bar函式未定義

例2:def foo()

:print

('from foo'

)bar()

def bar()

:print

('from bar'

)輸入:foo()

結果:from foo

from bar

例3: def bar()

:print

('from bar'

) def foo()

:print

('from foo'

)bar()

輸入:foo()

結果:from foo

from bar

例4: def foo()

:print

('from foo'

)bar()

def bar()

:print

('from bar'

)

輸入:foo()

報錯,在foo函式執行時,bar函式未進行定義,或者說,在foo函式執行時,bar函式在記憶體中沒有載入好

當我們執行乙個函式時,記憶體是如何處理的呢?,下面我用一張圖說明這個問題

風濕理論之函式即變數:類似函式的賦值操作,把這個函式裡面所有的**都當成普通的字串,放入記憶體中

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

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

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

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

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

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