Python作用域及其应用

Python的作用域规则决定了变量在代码中的可见性和访问性。全局作用域中定义的变量可以在整个程序中访问,而局部作用域中定义的变量则只能在其被创建的函数或代码块中访问。

全局作用域与局部作用域

全局作用域中的变量通常在程序的顶层定义,可以被整个程序的任意部分访问。例如:

复制代码
global_var = 10  # 全局变量

def my_function():
    print(global_var)  # 可以访问全局变量global_var

my_function()
print(global_var)  # 也可以在函数外部访问

局部作用域则是在函数内部定义的作用域,变量只在函数内部可见,函数外部无法访问。例如:

复制代码
def my_function():
    local_var = 20  # 局部变量
    print(local_var)

my_function()
print(local_var)  # 这里会报错,因为local_var不在这个作用域内

函数作用域与嵌套作用域

在Python中,函数作用域指的是函数内部定义的作用域,函数参数和局部变量都属于函数作用域。例如:

复制代码
def outer_function():
    outer_var = 30  # outer_var是外部函数的局部变量
    
    def inner_function():
        inner_var = 40  # inner_var是内部函数的局部变量
        print(outer_var)  # 内部函数可以访问外部函数的变量

    inner_function()
    print(inner_var)  # 这里会报错,因为inner_var不在outer_function的作用域内

outer_function()

嵌套作用域是指函数内部可以再定义函数,每个内部函数都可以访问其外部函数的变量。这种结构形成了一个作用域的层次结构,内部作用域可以访问外部作用域的变量,但反之则不行。

LEGB规则:变量查找顺序

Python中变量的查找顺序遵循LEGB规则:

  • Local(局部):在当前函数内部查找。
  • Enclosing function locals(外部嵌套函数的局部):在包含当前函数的外部函数内部查找。
  • Global module(全局模块):在全局作用域内查找。
  • Built-in(内置模块):在Python内置的命名空间中查找。

例如:

复制代码
x = 'global'

def outer():
    x = 'outer local'
    
    def inner():
        x = 'inner local'
        print(x)  # 首先在内部函数的局部作用域找到x

    inner()
    print(x)  # 然后在外部函数的局部作用域找到x

outer()
print(x)  # 最后在全局作用域找到x
相关推荐
喵手4 分钟前
Python爬虫零基础入门【第三章:Requests 静态爬取入门·第3节】稳定性第一课:超时、重试、退避(指数退避)!
爬虫·python·python爬虫实战·python爬虫工程化实战·python爬虫零基础入门·requests静态爬取·超时、重试、退避
沐知全栈开发7 分钟前
SVG 文本:深入解析与高效应用
开发语言
啊阿狸不会拉杆9 分钟前
《机器学习》第 7 章 - 神经网络与深度学习
人工智能·python·深度学习·神经网络·机器学习·ai·ml
张丶大帅11 分钟前
【走进Golang】
开发语言·后端·golang
Sheep Shaun13 分钟前
深入理解红黑树:从概念到完整C++实现详解
java·开发语言·数据结构·c++·b树·算法
楼田莉子14 分钟前
CMake学习:入门及其下载配置
开发语言·c++·vscode·后端·学习
没有bug.的程序员18 分钟前
Spring Boot 启动原理:从 @SpringBootApplication 到自动配置深度解析
java·spring boot·后端·python·springboot·application
学掌门25 分钟前
从数据库到可视化性能,5个大数据分析工具测评,python只排倒数
数据库·python·数据分析
2501_9445215926 分钟前
Flutter for OpenHarmony 微动漫App实战:列表项组件实现
android·开发语言·javascript·flutter·ecmascript
小二·26 分钟前
Python Web 开发进阶实战:联邦学习平台 —— 在 Flask + Vue 中构建隐私保护的分布式 AI 训练系统
前端·python·flask