guopengfa
发布于 2022-09-15 / 2470 阅读 / 0 评论 / 0 点赞

Python学习之名字,作用域,名字空间

目录

  • LEGB规则
  • 变量的修改

LEGB规则

从Python2.2开始,变量的LGB规则变成了LEGB规则,在嵌套函数内访问函数外层的变量时,它的顺序会是 嵌套函数内 -> 嵌套函数外层 -> 全局变量

a = 1
def foo():
    a = 2

    def bar():
        print(a)
    return bar
f = foo()
f()
"""
此时输出时2,若移除foo内的a=2;结果将会是1;可以验证LEGB规则
"""

变量的修改

a = 1
def foo():
    a = 2
    def bar():
        print(a)
        a = a+1
    return bar
f = foo()
f()
"""
UnboundLocalError: local variable 'a' referenced before assignment
我们仅仅添加了a=a+1就导致了报错,这是因为在嵌套函数内,只能读取嵌套函数以外的变量,若需要修改外层函数变量可以定义nonlocal a or global a在修改之前。
"""

原文


评论