⚡ 编程实验室🏗️ HTML🎨 CSS⚡ JavaScript🐍 Python🗄️ SQL☕ Java⚛️ React💚 Vue🟢 Node.js⚙️ C语言🐘 PHP🐹 Go🔷 TypeScript🐬 MySQL🔧 C++🎯 C#🦀 Rust🅱️ Bootstrap💡 jQuery🎸 Django🍃 MongoDB👗 Sass🎪 Kotlin📊 R语言📋 XML📊 Excel🐘 PostgreSQL🐳 Docker🅰️ Angular🎮 游戏🏠 网站首页

Python 变量作用域

理解 LEGB 规则:Local/Enclosing/Global/Built-in · 难度:进阶 · +15XP

Python 变量作用域

变量作用域决定了在程序的哪些位置可以访问某个变量。理解作用域对于编写清晰的 Python 代码至关重要。Python 使用 LEGB 规则来确定变量查找顺序:Local(局部)、Enclosing(闭包)、Global(全局)、Built-in(内置)。

局部作用域 (Local)

在函数内部定义的变量属于局部作用域,只能在函数内部访问:

def my_function():
    local_var = '我是局部变量'
    print(local_var)  # 可以访问

my_function() # print(local_var) # NameError! 外部无法访问

全局作用域 (Global)

在函数外部定义的变量属于全局作用域。但在函数内部修改全局变量需要使用 global 关键字:

global_var = '我是全局变量'

def read_global(): print(global_var) # 读取全局变量(不需要 global)

def modify_global(): global global_var # 声明要修改全局变量 global_var = '已被修改' print(global_var)

read_global() # 我是全局变量 modify_global() # 已被修改 print(global_var) # 已被修改

闭包作用域 (Enclosing)

嵌套函数中,内层函数可以访问外层函数的变量。使用 nonlocal 关键字可以在内层函数中修改外层函数的变量:

def outer():
    outer_var = '外层变量'

def inner(): nonlocal outer_var # 声明使用外层变量 outer_var = '被内层修改' print(outer_var)

inner() print(outer_var)

outer() # 输出: # 被内层修改 # 被内层修改

LEGB 查找规则示例

# Built-in (内置)
print  # <built-in function print>

# Global (全局) x = 'global'

def outer(): # Enclosing (闭包) x = 'enclosing'

def inner(): # Local (局部) x = 'local' print(x) # 输出: local

inner() print(x) # 输出: enclosing

outer() print(x) # 输出: global

LEGB 规则速查表

作用域缩写说明修改关键字
局部 (Local)L函数内部定义的变量无需
闭包 (Enclosing)E外层函数中定义的变量nonlocal
全局 (Global)G模块级别定义的变量global
内置 (Built-in)BPython 内置的名字不建议修改
Ctrl+Enter
🚀 升级VIP
解锁全部课程+AI助手

🏆 学习排行

加载中...

📊 统计

📖 152 篇
0 完成
🔥 0