puthon-变量(局部变量与全局变量)

局部变量 局部变量的作用范围为函数内部
1 def  test1():
2     a = 200 #局部变量只能在该函数中使用(它的作用范围在该函数里面)
3     a+=1
4     print('a的值为%s'%a)
5 
6 test1()
7 print(a)
8 #NameError: name 'a' is not defined

全局变量与局部变量 全局变量能在后面的代码中使用
a = 400
def  test1():
    a = 200 #局部变量只能在该函数中使用(它的作用范围在该函数里面)
    a+=1
    print('a的值为%s'%a)

def  test2():
    #a = 300 注意这里的a+=1出现会报错,因为局部变量a在引用前没有被定义
print('a的值为%s'%a) test1()#a的值为201 print(a)#400 test2() #a的值为400 全局变量,可以在后面的代码中使用
全局变量与局部变量在参数传递中的存在的问题
1
a=400 2 def test1(): 3 a = 200 #局部变量只能在该函数中使用(它的作用范围在该函数里面) 4 a+=1 5 print('a的值为%s'%a)
    return a
7 def test2(a): 8 #a = 300 9 10 print('test2a的值为%s'%a) 11 12 b=test1()#此时b输出结果为:a的值为201 13 test2(b)#此时报错test2() missing 1 required positional argument: 'a',因此需要在test1中返回a 14 print(a)

 a=400
 2 def  test1():
 3     a = 200 #局部变量只能在该函数中使用(它的作用范围在该函数里面)
 4     a+=1
 5     print('a的值为%s'%a)
    return a 7 def test2(a): 8 #a = 300 9 10 print('test2a的值为%s'%a)
12 b=test1()#此时b输出结果为:a的值为201
13 test2(b)# test2() takes 0 positional arguments but 1 was given 需要传入一个参数a

局部变量中对原变量进行修改(列表&字典)(可变类型)
name = ["zhangsan","lisi","wangwu"]
student= {"name":"laowang"}
def test1():
print("原始的全局变量为:%s"%name)
name[1] = "yasuo"
student["age"] = 236
    

test1()                 #result: 原始的全局变量为:['zhangsan', 'lisi', 'wangwu']
print(name)              #result: ['zhangsan', 'yasuo', 'wangwu']
print("现在的全局变量为%s"%name)   #result: 现在的全局变量为['zhangsan', 'yasuo', 'wangwu']
在的全局变量student为%s"%student)   #result:现在的全局变量为student{'name': 'laowang', 'age': 236}

局部变量对与全局变量同名函数定义,对全局变量不产生影响,需global声明(不可变类型)
name = ["zhangsan","lisi","wangwu"] a= "laogao" def test1(): print("原始的全局变量为:%s"%name) name[1] = "yasuo" a = "zed"#在局部变量中定义了a的函数 test1() print("现在的全局变量为%s"%name) print(a) #result laogao


global的用法
name = ["zhangsan","lisi","wangwu"]
a= "laogao"
b = 122
def   test1():
    print("原始的全局变量为:%s"%name)
    name[1] =  "yasuo"
    global a 
    a = "zed"
    global b
    b+=1
test1()
print("现在的全局变量为%s"%name)
print(a,b)

在函数中修改全局变量:1.如果是可变类型可以执行修改变量的值。2.如果全局变量是不可变类型,如果想要在函数中修改不可变类型,其实本质上是修改不可变类型的全局变量的引用(指向),加global就可以修改不可变类型的引用(可变的不考虑)

 
原文地址:https://www.cnblogs.com/yescarf/p/12107154.html