1. 程式人生 > >Python變數學習-認識全域性變數和區域性變數

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 def
test(): 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,這個就是在函式內修改全域性變數的值。

好,全域性變數和區域性變數的教程到此,謝謝大家觀看