Python全局与局部变量详解:作用域、变量查找与管理

1 下载量 144 浏览量 更新于2024-08-28 收藏 255KB PDF 举报
Python编程语言中,全局变量和局部变量是理解函数和作用域的关键概念。全局变量是在函数外部定义的,可以在整个程序的任何地方访问。比如在给定的例子中,`a = 10` 是一个全局变量,它在程序的任何位置都能被调用,如在 `func` 或 `inner` 函数中。 局部变量则只在其被定义的函数内部有效。例如,`b = 20` 在 `func` 函数内定义,因此它仅在 `func` 内部可用。同样,`c = 30` 在 `inner` 函数内部定义,属于 `inner` 的局部变量,无法在 `func` 或者程序的其他部分直接访问。 在 Python 中,变量的作用域遵循 LEGB 规则,即: 1. **L** 局部(Local):函数内部定义的变量。 2. **E** 嵌套(Enclosing):嵌套函数(闭包)中的非局部变量。 3. **G** 全局(Global):在函数外部定义的变量。 4. **B** 内置(Built-in):Python 内置的函数名和常量。 当我们试图在函数内部访问全局变量时,如果没有使用 `global` 关键字,Python 会默认在局部作用域中查找变量。例如,如果在 `func` 中尝试访问并修改全局变量 `a`,不使用 `global` 的话,Python 会创建一个新的局部变量 `a`,而不是修改全局的 `a`。使用 `global a` 后,我们可以在函数内部修改全局变量 `a` 的值,如例子所示,`a` 的值变为了 15。 另一方面,`nonlocal` 关键字用于在嵌套函数中引用并修改外层函数的局部变量。在 `inner` 函数中,如果想修改 `func` 中的 `b`,需要使用 `nonlocal b` 来声明 `b` 是 `func` 的非局部变量,这样 `inner` 就可以访问并修改它。 名称空间是存储变量的容器,分为全局命名空间、局部命名空间和内置命名空间。全局命名空间记录模块级别的变量,局部命名空间记录函数内部的变量,而内置命名空间包含了 Python 自带的函数和常量,如 `print`、`len` 等。 在编写 Python 代码时,理解全局变量、局部变量以及它们的作用域规则至关重要,这有助于避免因变量作用域不当导致的错误,并确保代码的清晰性和可维护性。正确使用 `global` 和 `nonlocal` 关键字可以帮助你有效地管理不同作用域内的变量,特别是在处理函数嵌套或需要跨作用域操作变量时。