当前位置:优草派 > 问答 > Python问答

Python 如何访问外围作用域中的变量

标签: Python  Python开发  Python  作者: Plutus

回答:

Python 是一门高级编程语言,它支持面向对象编程、函数式编程、模块化编程等多种编程范式。在 Python 中,变量的作用域分为局部作用域、全局作用域和嵌套作用域。其中,局部作用域指的是函数内部的作用域,全局作用域指的是模块内的作用域,嵌套作用域指的是函数内部的函数作用域。在 Python 中,访问外围作用域中的变量需要使用特定的语法和技巧。

一、LEGB 规则

Python 中的变量查找顺序遵循 LEGB 规则,即:Local、Enclosing、Global、Built-in。这个规则指的是 Python 解释器在查找变量时所遵循的顺序。具体来说,它先查找局部作用域(Local),如果没有找到,则查找嵌套作用域(Enclosing),再没有找到,则查找全局作用域(Global),最后查找内置作用域(Built-in)。

二、global 关键字

在 Python 中,使用 global 关键字可以在函数内部访问和修改全局变量。例如:

```

x = 10

def foo():

global x

x += 1

print(x)

foo() # 输出 11

```

在上面的代码中,使用 global 关键字声明了变量 x 是全局变量。在函数内部,对变量 x 的任何修改都会影响到全局作用域中的 x 变量。

三、nonlocal 关键字

如果在嵌套函数中需要访问外围函数的变量,可以使用 nonlocal 关键字。例如:

```

def outer():

x = 10

def inner():

nonlocal x

x += 1

print(x)

inner() # 输出 11

outer()

```

在上面的代码中,使用 nonlocal 关键字声明了变量 x 是外围函数 outer 中的变量。在内部函数 inner 中,对变量 x 的任何修改都会影响到外围函数 outer 中的 x 变量。

四、闭包

在 Python 中,闭包指的是一个函数对象和它所引用的外部变量组成的整体。例如:

```

def outer():

x = 10

def inner():

nonlocal x

x += 1

print(x)

return inner

foo = outer()

foo() # 输出 11

bar = outer()

bar() # 输出 11

```

在上面的代码中,outer 函数返回了一个 inner 函数对象。当调用 foo() 函数时,它会访问并修改外围函数 outer 中的变量 x。当调用 bar() 函数时,它也会访问并修改外围函数 outer 中的变量 x,但是它访问的是一个新的闭包。

五、总结

Python 中访问外围作用域中的变量需要使用特定的语法和技巧。其中,LEGB 规则指定了变量查找的顺序,global 关键字可以在函数内部访问和修改全局变量,nonlocal 关键字可以在嵌套函数中访问外围函数的变量,闭包可以保存外围函数的状态并在多次调用中进行修改。

TOP 10
  • 周排行
  • 月排行