標籤:error class code oba global erro turn var 聲明
本來以為 局部變數就是在函數/def/class/lambda內部的變數,全域變數就是在之前這些之外的變數。但是,再一次學習Python atm 中應用時發現了一次特例(意外)
字典中 在函數內部改變 其部分值之後,在函數外列印字典,字典的值竟然改變了。
x = {"w":1,"k":2}def a(x): x["w"] = 123 x = {"w":999,"k":3433} return xdef v(): c = a(x) print(x)v()
於是上網搜了一下 Python 全域變數與局部變數定義
1.定義的函數內部的變數名如果第一次出現,且在 = 前 那麼就認為被定義的函數是局部變數,不論是否全域變數中是否用到該函數名
num = 10def func(): num = 19 print(num) #值為19func()print (num) #值為10
再者
num = 10def func(): num = num + 19 print(num) func()print (num)
將報錯 :unboundlocalerror
num = 10def func(num): num = num + 19 print(num) func(num)print (num)
在函數中傳入參數則不會, 此時 num在函數中是全域變數
2. global 聲明全域變數
d = 6def a(): global d print(d) d = d + 2131 def v(): c = a() print(d)v()
在函數內部聲明global之後,修改d的值,則全域變數值改變。(此函數不能傳入參數d,否則global d則會報錯)
3.有時候想在函數內部引用全域的變數,疏忽就會出現下列錯誤:
var = 1def fun(): print(var) var = 300print(fun())------------------------------------------var = 2def fun(): var =var + 2 return varprint(fun())
4.字典
x1 = {"w":1,"k":2}x2 = {"o":3,"p":2}def a(x2): x1["w"] = 123 x2 = {"o":999,"p":343} return x1,x2def v(): c = a(x2) print(x1,x2)v()
{‘k‘: 2, ‘w‘: 123} {‘p‘: 2, ‘o‘: 3}
x1 = {"w":1,"k":2}x2 = {"o":3,"p":2}def a(x1,x2): x1["w"] = 123 x2 = {"o":999,"p":343} return x1,x2def v(): c = a(x1,x2) print(x1,x2)v()
輸出值:{‘k‘: 2, ‘w‘: 123} {‘p‘: 2, ‘o‘: 3}
Python 局部變數與全域變數