Python 局部变量与全局变量

时间:2021-04-18 10:30:45

本来以为 局部变量就是在函数/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}