局部變量
- 局部變量,就是在函數內部定義的變量
- 其作用范圍是這個函數內部,即只能在這個函數中使用,在函數的外部是不能使用的
- 因為其作用范圍只是在自己的函數內部,所以不同的函數可以定義相同名字的局部變量(打個比方,把你、我是當做成函數,把局部變量理解為每個人手里的手機,你可有個iPhone8,我當然也可以有個iPhone8了, 互不相關)
- 局部變量的作用,為了臨時保存數據需要在函數中定義變量來進行存儲
- 當函數調用時,局部變量被創建,當函數調用完成后這個變量就不能夠使用了
def my_func1(): # 局部變量的作用域(使用范圍)在函數的內部 函數的外部無法使用 num = 10 # 定義一個局部變量 print(num) # 調用函數 my_func1() # 10 # 再定義一個函數 def my_func2(): # 定義一個局部變量 num = 10 print(num) # 在函數內部定義的局部變量名可以和其他函數中的局部變量名相同 是不沖突的 my_func2() # 10
全局變量
如果一個變量,既能在一個函數中使用,也能在其他的函數中使用,這樣的變量就是全局變量
打個比方:有2個兄弟 各自都有手機,各自有自己的小秘密在手機里,不讓另外一方使用(可以理解為局部變量);但是家里的電話是2個兄弟都可以隨便使用的(可以理解為全局變量)
- 在函數外邊定義的變量叫做
全局變量
- 全局變量能夠在所有的函數中進行訪問
# 全局變量 或者 變量(作用域是在整個模塊內使用) num = 10 # 分別在兩個函數內部使用了全局變量 def my_func1(): print("my_func1", num) def my_func2(): print("my_func2", num) print("函數外面", num) # 函數外面 10 my_func1() # my_func1 10 my_func2() # my_func2 10
全局與局部變量
在子程序(即函數)中定義的變量稱為局部變量,在程序的一開始定義的變量稱為全局變量。
全局變量作用域是整個程序,局部變量作用域是定義該變量的子程序。
num = 10 def my_func1(): # 在函數內部如果使用一個變量 他先從函數內部找 如果有直接使用 # 如果函數內部沒有找到 會到函數外面找(全局變量) # 如果還是沒有找到 就報錯 num = 20 # 其實是定義了一個和全局變量名相同的局部變量 print("my_func1", num) my_func1() # my_func1 20 print("外面", num) # 外面 10
num = 10 def my_func1(): # 標識這函數內部不是定義一個局部變量 其實是對全局變量的進行修改 global num # 對全局變量的值進行修改 num = 20 print("my_func1", num) my_func1() # my_func1 20 print("外面", num) #外面 20
當全局變量與局部變量同名時:
在定義局部變量的子程序內,局部變量起作用;在其它地方全局變量起作用。
- 當函數內出現局部變量和全局變量相同名字時,函數內部中的
變量名 = 數據
此時理解為定義了一個局部變量,而不是修改全局變量的值
- 如果在函數中出現
global 全局變量的名字
那么這個函數中即使出現和全局變量名相同的變量名 = 數據
也理解為對全局變量進行修改,而不是定義局部變量 -
如果在一個函數中需要對多個全局變量進行修改,那么可以使用global a, b
school = "oldboy edu." def change_name(name): school = "Mage Linux" print("before change",name,school) name = "Alex Li" #這個函數就是這個變量的作用域 print("after change",name) name = "alex" change_name(name) print(name) print(school) #顯示:oldboy edu.
school = "oldboy edu." #全局變量 def change_name(name): global school #在局部變量中改全局變量,用global school = "Mage Linux" print("before change",name,school) name = "Alex Li" #這個函數就是這個變量的作用域 print("after change",name) print(school) #函數調用之前,顯示:oldboy edu. name = "alex" change_name(name) print(name) print(school) #函數調用之后,顯示:Mage Linux
def change_name(): global name #外面沒有這個全局變量,里面定義,最好不要用!! name = "alex" change_name() print(name) names = ["Alex","Jack","Rain"] def change_name(): names[0]="金角大王" #除了字符串和整數,列表、字典、集合、類是可以在局部中改全局變量 print("inside func",names) change_name() print(names)