Python:函数 :全局变量和局部变量 及 LEGB

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

猜你喜欢

转载自blog.csdn.net/aixiangnan/article/details/88833861