一、基礎
在子程式中定義的變數稱為區域性變數,在程式一開始定義的變數稱為全域性變數。
例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 一般程式把新產生的動態資料存放在堆區,函式內部的自動變數存放在棧區。自動變數一般會隨著函式的退出而釋放空間,靜態資料 即使是函式內部的靜態區域性變數 也存放在全域性資料區。...