1.局部作用域:变量定义于函数内部,其作用域仅限于函数中。
2.全局作用域:变量定义于函数外部。
3.global语句:使得函数内部可以修改全局变量的值。
x = 880
def fun():
global x
x = 520
print(x)
fun()
print(x)
## 520
## 520
需要注意的是,在程序中随意的使用global语句容易使得程序有难以排查的bug,因此应当谨慎使用。
4.函数的嵌套:
不同函数可以实现嵌套使用(内部函数不可直接调用)
def funa():
x=520
def funb():
x=1314
print(x)
funb()
print(x)
funa()
## 1314
## 520
nonlocal语句,使得嵌套中内部函数可以修改外部函数中变量的值:
def funa():
x=520
def funb():
nonlocal x
x=1314
print(x)
funb()
print(x)
funa()
## 1314
## 1314
5.LEGB规则
LEGB是Python中变量查找的四个作用域的缩写,当在Python中访问一个变量时,解释器会按照LEGB的顺序来查找变量,即首先在局部作用域中查找,如果找不到,则依次在外部作用域、全局作用域和内置作用域中查找。
Local(局部作用域):指的是函数内部的作用域。在函数内部定义的变量都属于局部作用域。
Enclosing(外部作用域):指的是包含函数的局部作用域,但不是全局作用域。这通常出现在嵌套函数的定义中,外部函数的作用域对于内部函数来说就是外部作用域。
Global(全局作用域):指的是模块级别的作用域。在模块顶层定义的变量都属于全局作用域,它们可以被模块中的所有函数访问。
Built-in(内置作用域):指的是Python内置的名称空间,包含了python解释器内置的名称,如print、id等。