美文网首页
Python 全局变量、LEGB原则

Python 全局变量、LEGB原则

作者: 李霖弢 | 来源:发表于2019-12-26 11:54 被阅读0次

全局变量

Python 的全局变量是模块 (module) 级别的

  • 当在函数中使用变量名时,Python 依次搜索 4 个作用域
    1. Local(函数/类内部)
    2. Enclosed(外层嵌套函数/lambda内)
    3. Global(全局作用域)
    4. Built-in(内置作用域)

python默认内层作用域可以引用外层名称,但不可以改变(因为改变的话就会用到名称绑定操作),需要改变时应先使用global关键字声明,使其指向该模块下的全局变量

tt="1"
def test1():
    tt="2"
    def test2():
        global tt # 只会让test2函数体内的tt变为指向全局tt
        tt="3"
    test2() # 此处追溯到 Local tt="2"
    print(tt)
print(tt)
test1()
print(tt)
# 1 2 3

变量字典

通过以下函数可以获取变量字典
  • globals():该函数返回全局范围内所有变量组成的“变量字典”。
  • locals():该函数返回当前局部范围内所有变量组成的“变量字典”。
    • 在全局范围内调用时,有locals() == globals()
    • 通过 locals() 获取的局部范围字典,即使对它修改也不会影响局部变量。但获取的全局范围字典可以修改。
  • vars(object):获取在指定对象范围内所有变量组成的“变量字典”。如果不传入object 参数,vars() 和 locals() 的作用完全相同。
通过属性获取变量字典

每个模块具有__dict__字典属性
每个函数拥有对应的 __globals__ 字典属性,同其所属模块的 __dict__ 字典

相关文章

  • Python 全局变量、LEGB原则

    全局变量 Python 的全局变量是模块 (module) 级别的 当在函数中使用变量名时,Python 依次搜索...

  • python闭包和装饰器

    一、python函数作用域LEGB python解释器查找变量的原则(顺序):L→E→G→BL:Local函数内部...

  • python基础2.2 True+True

    python的作用域规则:LEGB原则 为什么Python会认为两个完全不同的对象拥有相等的值?在Python中布...

  • python-作用域

    globals() 查看命名空间里面所有全局变量的内容locals()局部变量LEGB规则,既有全局变量又有局部...

  • 2018-03-20作用域和添加实例属性和方法

    一、LEGB 规则 Python 使用 LEGB 的顺序来查找一个符号对应的对象 locals -> enclos...

  • Python LEGB规则

    本篇总结了Python中的命名空间及LEGB原则 写在前面的话之所以有这篇总结,是因为在当初学习及使用Python...

  • Python | LEGB规则

    LEGB的名字取自: Locals :当前命名空间,如函数或模块 Enclosing :外部嵌套函数的命名空间(闭...

  • 十:Python之LEGB规则

    Python在查找 ‘ 名称‘ 时,是按照LEGB规则查找的: Local --> Enclosed --> Gl...

  • python的global函数以及LEGB原则

    1. 起因 两小段代码的故事: 你能不运行代码直接告诉这两个小代码的结果么? 2. 解释 python中的局部变量...

  • python函数

    函数 全局变量 获取全局变量python获取全局变量直接获取 修改全局变量python不允许直接修改全局变量如果要...

网友评论

      本文标题:Python 全局变量、LEGB原则

      本文链接:https://www.haomeiwen.com/subject/jhskoctx.html