Python 局部变量与全局变量

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

posted @ 2016-12-13 00:54  Chaz_Sun  阅读(1440)  评论(0编辑  收藏  举报