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就可以修改不可变类型的引用(可变的不考虑)