Python 作用域查找顺序 LEGB 详解

雨浩姑娘_3903

雨浩姑娘_3903

2026-01-18

218人浏览

原创

Python变量作用域查找顺序是LEGB:Local→Enclosing→Global→Built-in。Local指函数内定义的局部变量;Enclosing指嵌套函数中外层函数的局部变量;Global指模块级全局变量;Built-in指Python内置函数与常量。

python 作用域查找顺序 legb 详解

Python 中变量的作用域查找顺序是 LEGB,即 Local → Enclosing → Global → Built-in。这个规则决定了当代码中使用一个变量时,Python 会按什么顺序去搜索它的定义。

Local(局部作用域)

函数内部定义的变量属于局部作用域,只在该函数内有效。每次调用函数都会创建新的局部作用域,函数执行完后自动销毁。

例如:

Python Hardener
Python Hardener

通过完整的安全审查、代码整洁重构、健壮的错误处理、正确的日志记录以及完整的文档字符串覆盖,强化 Python 脚本。

下载
def func():
    x = 10        # x 是局部变量
    print(x)      # ✅ 可以访问
func()
print(x)          # ❌ NameError: name 'x' is not defined

Enclosing(嵌套作用域)

当一个函数内部定义了另一个函数(闭包),外层函数的局部变量对内层函数来说就是嵌套作用域中的变量。它不是全局的,也不是内层函数自己的局部变量,而是“被包围”的那一层。

注意:内层函数可以读取外层函数的变量,但默认不能直接赋值修改(需用 nonlocal 声明)。

例如:

def outer():
    y = "outer"
    def inner():
        print(y)   # ✅ 可以读取 enclosing 层的 y
    inner()
outer()

Global(全局作用域)

模块顶层(不在任何函数或类中)定义的变量属于全局作用域,在整个模块内都可访问(除非被局部同名变量遮蔽)。在函数中读取全局变量无需声明,但要修改必须用 global 关键字。

  • 读取全局变量:直接使用变量名即可
  • 修改全局变量:需在函数开头写 global var_name
  • 多个全局变量可一次声明:global a, b, c

Built-in(内置作用域)

Python 预定义的函数和常量,比如 len()、print()、True、None 等,都位于内置作用域。它是作用域链的最外层,只有当前面三层都找不到变量时,才会查这里。

⚠️ 注意:不要轻易覆盖内置名称,否则可能导致意外行为。

len = "my string"   # 覆盖了内置 len()
print(len([1,2,3])) # ❌ TypeError: 'str' object is not callable

LEGB 是逐层向上查找的单向过程,一旦找到就停止,不会继续往更外层找。理解它有助于避免命名冲突、正确使用 global/nonlocal,也能更快定位变量未定义或值异常的问题。

Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!

相关专题

更多
python中print函数的用法
python中print函数的用法

python中print函数的语法是“print(value1, value2, ..., sep=' ', end='\n', file=sys.stdout, flush=False)”。本专题为大家提供print相关的文章、下载、课程内容,供大家免费下载体验。

2023.09.27

3500

5

python print用法与作用
python print用法与作用

本专题整合了python print的用法、作用、函数功能相关内容,阅读专题下面的文章了解更多详细教程。

2026.02.03

269

24

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

2023.10.24

6404

49

全局变量怎么定义
全局变量怎么定义

本专题整合了全局变量相关内容,阅读专题下面的文章了解更多详细内容。

2025.09.18

5385

12

python 全局变量
python 全局变量

本专题整合了python中全局变量定义相关教程,阅读专题下面的文章了解更多详细内容。

2025.09.18

2290

13

c++ 全局变量
c++ 全局变量

本专题整合了c++全局变量的使用、定义、作用域等等内容,阅读专题下面的文章了解更多详细内容。

2026.03.17

219

17

go语言闭包相关教程大全
go语言闭包相关教程大全

本专题整合了go语言闭包相关数据,阅读专题下面的文章了解更多相关内容。

2025.07.29

5233

19

Go-Zero API开发使用教程
Go-Zero API开发使用教程

本专题聚焦Go-Zero的API开发,拆解.api描述文件的语法结构、路由与分组定义、参数绑定与校验规则,说明统一响应体、JWT鉴权、跨域与接口文档生成的落地方式,并给出网关聚合与接口测试的实践建议。

2026.11.12

100

15

Go-Zero安装与goctl环境配置教程
Go-Zero安装与goctl环境配置教程

本专题围绕Go-Zero的安装与工具链配置展开,讲清Go版本要求、goctl安装方式、代理镜像、protoc依赖与环境变量设置,说明多版本共存、升级回退与CI流水线安装的做法,并整理安装阶段的常见报错与验证步骤。

2026.11.12

60

15

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程