Python變數學習-認識全域性變數和區域性變數
學習Python的過程中少不了用到變數,在日常的編寫程式的過程中,每時每刻都在使用變數,
問:什麼是變數
答:變數是可以改變的數,通常沒有固定的值
問:有幾種變數
答:變數分為2種形式,即:全域性變數和區域性變數
名詞解釋:
全域性變數:顧名思義全域性變數,作用域在整個檔案中任何地方都可以使用的變數
區域性變數:顧名思義,作用域的範圍沒有全域性變數那麼大,他的作用域有可能在一個函式體內,也有可能在一個複合函式內
如何定義這兩種變數
全域性變數:
1 #定義一個全域性變數 2 age = 12 3 4 #為了區分全域性變數和區域性變數,特意寫一個函式5 def test(): 6 print('在函式內列印的',age) 7 #執行函式 8 test() 9 10 print('在函式外面列印的',age)
在函式內列印的 12
在函式外面列印的 12
看上面程式碼執行的結果和程式碼,我在第2行程式碼定一個一個變數名為age的變數,這個變數可以理解成是全域性變數,仔細看下,這個名為age的變數我既可以在test這個函式中使用,同時也可以在這個函式外使用,這也就是我上面說的作用域為整個檔案的任何地方。
區域性變數:
1 #為了區分全域性變數和區域性變數,特意寫一個函式 2 deftest(): 3 #定義的一個區域性變數 4 age = 12 5 print('在函式內列印的',age) 6 #執行函式 7 test() 8 9 print('在函式外面列印的',age)
Traceback (most recent call last): 在函式內列印的 12 File "/Users/dark/PycharmProjects/Study/changec.py", line 17, in <module> print('在函式外面列印的',age) NameError: name 'age'is not defined
這次是定義的一個區域性變數,看下執行結果顯然的報了一個錯誤,在看下程式碼,這次我在test這個函式內定義了一個age,我直接列印,在看下面的執行結果正常列印,接著看下我在第9行程式碼列印的age,顯然執行出錯,並且提示“name 'age' is not defined”(名字為age沒有找到),出現這個錯誤的原因就是我上面說的作用域的問題。
總結:在函式外面定義的變數,稱之為全域性變數,函式內定義的變數稱之為區域性變數,全域性變數可以在函式內使用,但是函式內定義的區域性變數不可以在函式體外使用
變數修改:
1 #定義一個全域性變數 2 age =12; 3 #為了區分全域性變數和區域性變數,特意寫一個函式 4 def test(): 5 #定義的一個區域性變數 6 age = 25 7 print('在函式內列印的',age) 8 #執行函式 9 test() 10 11 print('在函式外面列印的',age)
在函式內列印的 25
在函式外面列印的 12
講解到關閉變數修改值的問題。比如上述程式碼,我定義一個全域性變數,我在test函式內定義一個區域性變數,那麼我在函式內列印的age會不會和在函式外列印的age的值是一樣的呢?
這個顯然不是的,看下程式碼和執行結果我定義的全域性變數在函式外面列印的是12,而在函式內列印的是25,Why?為什麼會這樣。這個問題又牽扯到我剛才說的作用域的問題,如果在函式內和函式外定義一個變數名相同的變數(也就是說我定義一個全域性變數和區域性變數相同名字的變數),列印的時候按照什麼原則列印呢?是按照的就近原則列印的。如果在函式內列印,首先會在函式內尋找有沒有一個名字叫做age的變數,如果有列印,如果沒有在尋找有沒有全域性變數的名字叫做age,變數存在,列印,不存在則報錯。
再回到我剛才所說的那樣變數修改,
問:那是不是我定義一個全域性變數,我想在一個函式內修改是不是就不能修改呢?
答:肯定不是的,那麼如何在函式內修改全域性變數呢?
這個需要用到一個指定符(誰知道這玩意叫啥,我隨口說的)global來指定變數是全域性的,看操作如何使用
1 #定義一個全域性變數 2 age =12; 3 #為了區分全域性變數和區域性變數,特意寫一個函式 4 def test(): 5 #定義的一個區域性變數 6 global age 7 age = 25 8 print('在函式內列印的',age) 9 #執行函式 10 test() 11 12 print('在函式外面列印的',age)
在函式內列印的 25
在函式外面列印的 25
Look,通過global指定age為全域性值,通過第7行程式碼的修改變數值,經過輸出,輸出值都是25,這個就是在函式內修改全域性變數的值。
好,全域性變數和區域性變數的教程到此,謝謝大家觀看