Python基础学习12--变量作用域

变量作用域

  • 变量有作用范围限制
  • 分类:按照作用域分类
    1. 全局(global):在函数外部定义
    2. 局部(local):在函数内部定义
  • 变量的作用范围:
    1. 全局变量:在整个全局范围都有效
    2. 全局变量在局部可以使用(即函数内部可以方位函数外部定义的变量)
    3. 局部变量在局部范围可以使用
    4. 局部变量在全局范围无法使用
  • LEGB原则
    1. L(Local):局部作用域
    2. E(Enclosing function locale):外部嵌套函数作用域
    3. G(Global module):全局作用域
    4. B(Buildin): 内置作用域(内置函数所在模块的范围)
    5. 以 L –> E –> G –>B 的规则查找,即:在局部找不到,便会去局部外的局部找(例如闭包),再找不到就会去全局找,再者去内置中找。
# a1是全局变量
a1 = 100
def func1():
    print(a1,"a1在函数内")
    # a2的作用范围是函数func1内
    a2 = 99
    print(a2,' a2也在函数内')

print(a1)
print('-' * 15)
func1()
print('-' * 15)
print(a2)

输出结果如下:

100
---------------
100 a1在函数内
99  a2也在函数内
---------------
NameError: name 'a2' is not defined    # 因为a2是函数体内的局部变量,所以在外部调用时会报错!

 如果函数外部想要调用函数内部的变量,此时则需要将局部变量升级为全局变量

def func2():
    global b1       # globa的作用时将局部变量转为全局变量----global一定要放在变量 b1 之前
    b1 = 100  
    print(b1,'b1在函数内')

# print(b1)         # 如果在调用函数前,输出b1,则会报错,因为函数在未调用前,python是不会执行函数体,因此在python看来,b1是未定义的变量
func2()
print('-' * 15)
print(b1,'b1可以在函数外了')

 

 输出结果如下:

100 b1在函数内
---------------
100 b1可以在函数外了

 

posted @ 2019-02-13 16:33  落晨  阅读(159)  评论(0编辑  收藏  举报