1,作用域:变量起作用的范围称为变量的作用域,不同作用域内同名变量之间互不影响。
变量分为:全局变量、局部变量。
2,全局变量
1) 在函数和类定义之外声明的变量
2)全局变量降低了函数的通用性和可读性。应尽量避免全局变量的使用。
3) 全局变量一般做常量使用。
4)函数内要改变全局变量的值,使用 global 声明一下
3,局部变量:
1)在函数体中(包含形式参数)声明的变量。
2) 局部变量的引用比全局变量快,优先考虑使用。
3)如果局部变量和全局变量同名,则在函数内会隐藏全局变量,只使用同名的局部变量
用例子来说明:
例1
a=0 # 全局变量
def hanshu():
a=2 # 局部变量
print(a) #2
hanshu()
print(a) #0
例2
#如果全局同名变量是可变的数据类型,函数可以对全局变量内部直接进行修改
a=[]
def hs():
# a=[]
a.append(1)
print(a)
hs()
print(a)
输出:
[1]
[1]
当有同名局部变量(a=[])时,则输出为
[1]
[]
所以函数优先读取局部变量
例3
a=[]
def hanshu():
a=8
print(a)
print(a)
hanshu() #二者交换有不同结果?不
例4
a=3
def hanshu():
a+=5 #a=a+5 把a+5赋值给a a+5中的a找不到 #输出报错,找不到局部变量a,无法加
hanshu()
print(a)
输出:报错
区别以下:
a=3
def hanshu(a):
a+=5
print(a)
hanshu(2)
print(a)
输出:
7
3
4,重点: LEGB
#变量的查找顺序 从里向外查找
#作用域局部>外层作用域>当前模块中的全局>python内置作用域;
#local>enclose>global>built-in LEGB
例如:
a=1
b=1
c=2
def waibu():
b=20
c=30
def neibu():
c=300
print(c) #local
print(b) #enclose
print(a) #globar
print(max) #built-in
neibu()
waibu()
输出:
300
20
1
built-in function max