变量与作用域

2024-04-02  本文已影响0人  Joening

变量与作用域

全局与局部变量

名称空间namespace 顾名思义就是存放名字的地方,存什么名字呢?举例说明,若变量x=1,1存放于内存中,那名字x存放在哪里呢?名称空间正是存放名字x与1绑定关系的地方
名称空间共3种,分别如下

locals:
是函数内的名称空间,包括局部变量和形参
globals:
全局变量,函数定义所在模块的名字空间
builtins:
内置模块的名字空间
作用域(scope)
通常来说,一段程序代码中所用到的名字并不总是有效/可用的,而限定这个名字的可用性的代码范围就是这个名字的作用域。
不同变量的作用域不同就是由这个变量所在的命名空间决定的。

作用域查找顺序LEGB
locals -> enclosing function -> globals -> builtins
locals 是函数内的名字空间,包括局部变量和形参
enclosing 外部嵌套函数的名字空间
globals 全局变量,函数定义所在模块的名字空间
builtins 内置模块的名字空间
如何在函数里修改全局变量?

name = "noah luo"
def change_name():
    global name
    name = "noah is luo gang"
    print("after change", name)
change_name()
print("在外面看看name改了么?", name)
上一篇下一篇

猜你喜欢

热点阅读