Python中的作用域

LEGB

L:local,局部作用域,即函数中定义的变量

E:enclosing,嵌套的父集函数的局部作用域,即包含此函数的上级函数的局部作用域,但不是全局的

G:global,全局变量,就是模块级别定义的变量

B:built-in,系统固定模块里面的变量,比如int,bytearray等。搜索变量的优先级顺序依次是:作用域局部>外层作用域>当前模块的全局>Python内置作用域,也就是LEGB

 

x=int(2.9)   #int bulit-in
g_count = 0    #global
def outer():
    o_count = 1  #enclosing
    def inner():
        i_count = 2  #local
        print(i_count)
        print(o_count)
 
    inner()
 
outer()

错误的经典案例分析

count=10
def outer():
    print(count)
    count=5 #不能修改全局的作用域的值

 

 下面的这个可以

count=10
def outer():
    count = 9 #在内部定义一个变量是局部变量
 
outer()

或者修改成下面

count=10
def outer():
    global count
    print(count)
    count=5 
    print(count)

局部变量修改的关键字

def outer1():
    count = 10
    def inner():
        nonlocal count
        count=20
        print(count)
    inner()
    print(count)
outer1()

 

posted @ 2019-09-25 10:54  测试的世界很精彩  阅读(257)  评论(0编辑  收藏  举报