python中变量的作用域
作用域
在python中,变量不需要提前进行预声明,但是,在使用变量之前,我们仍需要对其进行一次赋值操作,在不同位置定义的变量,是有不同的作用范围的,在变量的作用范围之外,使无法对变量进行调用和访问的。
变量的作用域虽然了变量的作用范围,但是同时也形成了变量名的命名空间,有效避免了程序编写过程中的命名污染,大大降低了命名的工作量。
全局变量与局部变量
在python中,变量分为全局变量(global)和局部变量(local),全局变量是指在函数外部声明的变量,即在全局范围内有效,而局部变量则有作用范围的,局部变量通常在函数内部定义,也只能在函数内部进行访问和调用。也就是说,全局变量不论是在函数内部还是在函数外部,都是可以进行访问和调用的,而在局部变量则只能在函数内部访问,在函数外部对函数内部定义的局部变量进行访问时,会出现语法错误,会告诉你访问的变量未定义。
变量作用域的LEGB原则
- L(local):局部作用域,即在变量声明的函数内部有效
- E(Enclosing function local):外部嵌套函数的命名空间,通常在闭包形态形态下的作用域,即内部的函数包含了对外部函数作用域中变量的引用
- G(Global module):函数定义所在模块的作用域
- B(Buildin):python内建模块的作用域
global关键字
在函数内部可以使用global关键字将局部变量强行转换为全局变量
a = 1
def fun():
global a # 将a强制转换为全局变量
a = 2
# print(a) #进行代码测试
print(a)
fun()
print(a)
globals()方法和locals()方法