python中全局变量和局部变量作用域理解

发布时间 2023-11-28 13:13:44作者: 秒秒开心

一:描述

python中全局变量和局部变量作用域理解

 

二:回答

1. 局部变量不能修改全局变量

局部变量只作用于方法内,无法修改全局变量

 1 #全局变量city
 2 city = "上海"  
 3   
 4 def mod_city():  
 5     #局部变量city
 6     city = "深圳"  
 7     print(city)  
 8   
 9 print(city)  
10 mod_city()  
11 print(city)
12 
13 >>> 运行结果如下:
14 >>> 上海
15 >>> 深圳
16 >>> 上海

这里第9行和第11行都会打印上海,因为mod_city函数外部的city是全局变量,全局变量不会被函数内部的city即局部变量修改。
说明:如果这里mod_city有返回值,返回了city的值,然后在第10行用city接收返回值,即city = mod_city(),这样最后打印出来的也会是深圳,即外面的全局变量被赋值修改了

 

2. 局部变量加上关键词global可以变成全局变量

 1 #全局变量city
 2 city = "上海"  
 3   
 4 def mod_city():  
 5     #局部变量city加了关键词global,就变成了全局变量
 6     #全局变量就可以修改外部的city值
 7     global city  
 8     city = "深圳"  
 9     print(city)  
10   
11 print(city)  
12 mod_city()  
13 print(city)
14 
15 >>> 程序执行结果如下:
16 >>> 上海
17 >>> 深圳
18 >>> 深圳

上面函数内的city本来是一个局部变量,但是因为加了关键字global,city就变成了全局变量,它就可以修改外面的全局变量city的值
所以打印当调用mod_city方法后,city变量的值被改变,在函数外部打印city,打印出来的也会是深圳

 

3. 扩展

 1 count = 0  
 2 def add(num):  
 3     global count  
 4     count += num  
 5     return count  
 6   
 7 add(10)  
 8 add(20)  
 9 add(30)  
10 print(count)
11 
12 >>> 程序运行结果如下:
13 >>> 60

add(10):此时num为10,count为全局变量为0+10=10
add(20):此时num为20,count为全局变量为10+20=30
add(30):此时num为30,count为全局变量为30+30=60