本来以为 局部变量就是在函数/def/class/lambda内部的变量,全局变量就是在之前这些之外的变量。但是,再一次学习Python atm 中应用时发现了一次特例(意外)
字典中 在函数内部改变 其部分值之后,在函数外打印字典,字典的值竟然改变了。
x = {"w":1,"k":2}
def a(x):
x["w"] = 123
x = {"w":999,"k":3433}
return x
def v():
c = a(x)
print(x)
v()
于是上网搜了一下 Python 全局变量与局部变量定义
1.定义的函数内部的变量名如果第一次出现,且在 = 前 那么就认为被定义的函数是局部变量,不论是否全局变量中是否用到该函数名
num = 10
def func():
num = 19
print(num) #值为19
func()
print (num) #值为10
再者
num = 10
def func():
num = num + 19
print(num)
func()
print (num)
将报错 :unboundlocalerror
num = 10
def func(num):
num = num + 19
print(num)
func(num)
print (num)
在函数中传入参数则不会, 此时 num在函数中是全局变量
2. global 声明全局变量
d = 6
def a():
global d
print(d)
d = d + 2131
def v():
c = a()
print(d)
v()
在函数内部声明global之后,修改d的值,则全局变量值改变。(此函数不能传入参数d,否则global d则会报错)
3.有时候想在函数内部引用全局的变量,疏忽就会出现下列错误:
var = 1
def fun():
print(var)
var = 300
print(fun())
------------------------------------------
var = 2
def fun():
var =var + 2
return var
print(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,x2
def 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,x2
def v():
c = a(x1,x2)
print(x1,x2)
v()
输出值:{'k': 2, 'w': 123} {'p': 2, 'o': 3}