在学习 Python作用域 的过程中,很多初学者常常对“变量在哪里能用”、“为什么这个变量报错”感到困惑。其实,只要理解了 Python 的作用域规则,这些问题就会迎刃而解。本文将用通俗易懂的方式,带你彻底搞懂 局部变量、全局变量 以及核心的 LEGB规则。
作用域(Scope)指的是程序中变量可以被访问的区域。简单来说,就是“变量在哪些地方有效”。Python 中的作用域决定了你能否在某段代码中使用某个变量。
Python 使用 LEGB 规则 来查找变量。LEGB 是四个英文单词首字母的缩写,代表变量查找的顺序:
len、print 等。当 Python 遇到一个变量名时,它会按照 L → E → G → B 的顺序依次查找,直到找到为止。
在函数内部定义的变量称为局部变量,只能在该函数内部使用。
def my_function(): x = 10 # 局部变量 print(x)my_function() # 输出: 10# print(x) # 报错!NameError: name 'x' is not defined 上面的例子中,x 是 my_function 的局部变量,函数外部无法访问它。
在函数外部、模块顶层定义的变量是全局变量,整个模块中都可以访问。
y = 20 # 全局变量def another_function(): print(y) # 可以读取全局变量another_function() # 输出: 20print(y) # 输出: 20 但注意:如果你想在函数内部修改全局变量,必须使用 global 关键字,否则 Python 会认为你在创建一个新的局部变量。
count = 0 # 全局变量def increment(): global count # 声明使用全局变量 count += 1increment()print(count) # 输出: 1 当函数内部又定义了函数(闭包),内层函数可以访问外层函数的变量,这就是嵌套作用域。
def outer(): z = 30 # 外层函数的变量 def inner(): print(z) # 内层函数可以访问 z inner()outer() # 输出: 30 如果要在 inner() 中修改 z,需要使用 nonlocal 关键字:
def outer(): z = 30 def inner(): nonlocal z z = 40 inner() print(z) # 输出: 40outer() 这是最外层的作用域,包含 Python 自带的所有内置函数和异常,比如 len()、range()、ValueError 等。你不需要导入就能直接使用它们。
global,它会让代码难以维护。掌握 Python作用域 是编写清晰、可靠代码的基础。记住:局部变量只在函数内有效,全局变量需谨慎修改,而 LEGB规则 是 Python 查找变量的黄金法则。通过本文的讲解和示例,相信你已经能自信地处理各种作用域问题了!
—— 学好作用域,写出更优雅的 Python 代码 ——
本文由主机测评网于2025-12-10发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://www.vpshk.cn/2025125875.html