变量与作用域
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)