当前位置: 首页 > news >正文

Python 中的作用域:规则与应用

在 Python 编程中,作用域(Scope) 是指一个变量可以被访问和引用的范围。作用域与变量的生命周期密切相关,决定了变量何时被创建、何时被销毁以及在哪些地方可以使用它。理解作用域对于编写清晰、可维护的代码至关重要。

Python 中的作用域机制可以通过 LEGB 规则(Local, Enclosing, Global, Built-in)来理解。当我们在代码中引用一个变量时,Python 会按照这个规则逐层查找变量所在的作用域,直到找到变量或抛出错误。

1. 局部作用域(Local Scope)

局部作用域指的是在函数内部定义的变量,这些变量只能在该函数内被访问和操作。局部作用域是临时的,函数执行完毕后,局部作用域内的变量会被销毁。

举个例子:

def calculate_square():side_length = 5  # 局部变量print(side_length ** 2)  # 可以访问局部变量,输出 25calculate_square()
# print(side_length)  # 这会引发 NameError,因为 side_length 是局部变量

在上述代码中,side_length 是一个局部变量,它只能在 calculate_square 函数内部访问。函数外部尝试访问时,Python 会抛出 NameError,因为局部变量超出了其作用域。

2. 嵌套作用域(Enclosing Scope)

嵌套作用域是指一个函数内定义了另一个函数。内部函数可以访问外部函数的变量,而外部函数无法访问内部函数的变量。这种作用域一般出现在闭包中。

例子:

def outer_function():outer_var = 10  # 外部函数中的变量def inner_function():print(outer_var)  # 内部函数可以访问外部函数的变量inner_function()outer_function()

在上面的例子中,inner_function 可以访问 outer_function 中定义的变量 outer_var。这种情况说明,内部函数的作用域可以访问外部函数的变量,而外部函数无法访问内部函数的变量。

3. 全局作用域(Global Scope)

全局作用域是指在函数外部定义的变量。全局变量可以在程序的任何位置被访问和修改,除非在局部作用域或嵌套作用域中使用相同的变量名覆盖了全局变量。

global_var = 30  # 全局变量def print_global():print(global_var)  # 可以访问全局变量,输出 30print_global()
print(global_var)  # 也可以在全局作用域中访问,输出 30

在这个例子中,global_var 是全局变量,既可以在全局作用域中使用,也可以在函数 print_global 内部使用。

4. 内置作用域(Built-in Scope)

内置作用域包含了 Python 提供的一些内置名称和函数,如 print(), len(), str() 等。这些名称在其他作用域之前会首先被查找。需要注意的是,如果我们定义了与内置函数同名的变量或函数,可能会覆盖这些内置名称。

len = 10  # 重新定义了内置函数 lenprint(len)  # 输出 10,而不是原本的 len 函数

在上述代码中,我们将内置的 len 函数重新定义为一个整数 10,这导致后续对 len() 的调用返回的是 10,而不是原有的 len 函数。

5. LEGB 规则

Python 的作用域遵循 LEGB 规则,即:

  1. Local:首先查找局部作用域,优先级最高。
  2. Enclosing:如果局部作用域中找不到,接着查找任何外层函数的嵌套作用域。
  3. Global:若嵌套作用域中也未找到,查找全局作用域。
  4. Built-in:最后查找内置作用域。

Python 会按顺序依次检查这些作用域,直到找到变量。如果所有作用域都没有找到该变量,Python 会抛出 NameError 异常。

举个例子,下面的代码展示了 LEGB 规则的实际应用:

x = 5  # 全局作用域def outer_function():x = 10  # 外层函数的变量def inner_function():x = 15  # 内部函数的变量print(x)  # 访问的是内部函数的 x,输出 15inner_function()outer_function()

在这个例子中,inner_function 会首先查找其局部作用域中的 x 变量,如果没有找到,则会查找外部函数 outer_function 的作用域,最后查找全局作用域。由于 inner_function 中有定义 x,它会使用该局部变量。

6. 总结

作用域是程序中变量生命周期的一个重要方面。理解 Python 的作用域规则有助于避免命名冲突、提高代码的可读性和可维护性。在实际编程中,合理利用局部、嵌套、全局和内置作用域,可以帮助开发者更加高效地管理变量的作用范围和生命周期。

通过掌握 LEGB 规则,我们可以更清楚地了解 Python 在查找变量时的优先顺序,从而避免一些潜在的错误并编写更加稳定的代码。

相关文章:

Python 中的作用域:规则与应用

在 Python 编程中,作用域(Scope) 是指一个变量可以被访问和引用的范围。作用域与变量的生命周期密切相关,决定了变量何时被创建、何时被销毁以及在哪些地方可以使用它。理解作用域对于编写清晰、可维护的代码至关重要。 Python 中…...

T-SQL语言的字符串处理

T-SQL语言的字符串处理 引言 在数据库管理和应用开发中,我们经常需要对字符串进行处理。字符串的处理包括查找、替换、分割、拼接以及格式化等操作,而这些操作在SQL Server中可以通过T-SQL(Transact-SQL)来实现。T-SQL是微软SQL…...

宇航用VIRTEX5系列FPGA的动态刷新方法及实现

SRAM型FPGA在宇航领域有广泛的应用,为解决FPGA在空间环境中的单粒子翻转问题,增强设计的可靠性,本文介绍一种低成本的抗辐照解决方案。该方案从外置高可靠存储器中读取配置数据,通过定时刷新结合三模冗余的方式消除单粒子影响&…...

Flink提交任务通过Kerberos认证

Flink提交任务通过Kerberos认证 Clouera官网地址: https://docs.cloudera.com/csa/1.7.0/security/topics/csa-securing-jobs.html Securing Apache Flink jobs flink run -d -p 2 \ -yD security.kerberos.login.keytabtest.keytab \ -yD security.kerberos.lo…...

【linux】文件与目录命令 - cp

文章目录 1. 基本用法2. 常用参数3. 用法举例4. 注意事项 cp 命令用于复制文件或目录,支持单个文件复制、多文件复制以及目录的递归复制,是 Linux 系统中常用的文件管理命令之一。 1. 基本用法 语法: cp [选项] 源文件 目标文件 cp [选项] …...

鸿蒙--登入案例

实现要求: 在账户和密码的输入框输入账号或密码时,提交按钮下方同步出现输入的账户和密码 Entry Component struct login {State username:string State password:string build() {Column(){// 图标Image($r(app.media.app_icon)).width(100).height(…...

【JavaWeb】EL表达式

目录 1.EL表达式概述 2.EL表达式运算 3.EL表达式操作对象 4.EL表达式内置对象 4.1.参数隐藏对象 4.2.域隐藏对象 4.3.PageContext对象 1.EL表达式概述 EL&#xff08;Expression Language&#xff09;是一门表达式语言&#xff0c;它对应<% ... %>。在JSP中&…...

Angular由一个bug说起之十三:Cross Origin

跨域 想要了解跨域&#xff0c;首要要了解源 什么是源&#xff0c;源等于协议加域名加端口号 只有这三个都相同&#xff0c;才是同源&#xff0c;反之则是非同源。 比如下面这四个里&#xff0c;只有第4个是同源 而浏览器给服务器发送请求时&#xff0c;他们的源一样&#xff0…...

WEB前端-2

目录 HTML-常见的网页标签-分类2 语义化标签 列表标签 表单标签 form标签 input标签 select标签 textarea标签 html转义符 h5提供的新标签 【例3&#xff1a;豆瓣电影】 【源码】 【例4&#xff1a;登录注册】 【源码】 【例5&#xff1a;QQ注册】 【源码】 H…...

高斯混合模型 (Gaussian Mixture Model, GMM) 算法详解与PyTorch实现

高斯混合模型 (Gaussian Mixture Model, GMM) 算法详解与PyTorch实现 目录 高斯混合模型 (Gaussian Mixture Model, GMM) 算法详解与PyTorch实现1. 高斯混合模型 (GMM) 算法概述1.1 高斯分布1.2 GMM的优势2. GMM的核心技术2.1 模型定义2.2 参数估计2.3 损失函数3. PyTorch实现G…...

web作业

作业一 <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta name"viewport" content"widthdevice-width, initial-scale1.0"> <title>Document</title> </head&g…...

Tauri教程-基础篇-第一节 Tauri项目创建及结构说明

“如果结果不如你所愿&#xff0c;就在尘埃落定前奋力一搏。”——《夏目友人帐》 “有些事不是看到了希望才去坚持&#xff0c;而是因为坚持才会看到希望。”——《十宗罪》 “维持现状意味着空耗你的努力和生命。”——纪伯伦 Tauri 技术教程 * 第四章 Tauri的基础教程 第一节…...

计算机网络之---物理层标准与协议

常见的物理层标准 1. IEEE 802 标准 IEEE 802 是一系列定义局域网和城域网通信协议的标准&#xff0c;其中许多标准涉及到物理层的技术细节&#xff1a; IEEE 802.3 (Ethernet)&#xff1a;定义了以太网的物理层规范&#xff0c;规定了如何通过电缆&#xff08;例如同轴电缆…...

Idea日志乱码

问题描述 前提&#xff1a;本人使用windows Idea运行sh文件&#xff0c;指定了utf-8编码&#xff0c;但是运行过程中还是存在中文乱码 Idea的相关配置都已经调整 字体调整为雅黑 文件编码均调整为UTF-8 调整Idea配置文件 但是还是存在乱码&#xff0c;既然Idea相关配置已经…...

tk GMV MAX素材范围投放指南

Product GMy Max素材范围说明 Product GMy Max能自动获取带有相关商品锚点链接&#xff08;无论是单个锚点还是多个锚点&#xff09;的视频&#xff0c;并将其用于推广特定商品的广告素材&#xff0c;前提是这些视频已经获得广告授权。然而&#xff0c;请注意&#xff0c;多个…...

TANGO - 数字人全身动作生成

文章目录 一、关于 TANGO演示视频&#xff08;YouTube&#xff09;&#x1f4dd;发布计划 二、⚒️安装克隆存储库构建环境 三、&#x1f680;训练和推理1、推理2、为自定义字符创建图形 一、关于 TANGO TANGO 是 具有分层音频运动嵌入 和 扩散插值的共语音手势视频再现 由东…...

springboot集成整合工作流,activiti审批流,整合实际案例,流程图设计,流程自定义,表单配置自定义,代码demo流程

前言 activiti工作流引擎项目&#xff0c;企业erp、oa、hr、crm等企事业办公系统轻松落地&#xff0c;一套完整并且实际运用在多套项目中的案例&#xff0c;满足日常业务流程审批需求。 一、项目形式 springbootvueactiviti集成了activiti在线编辑器&#xff0c;流行的前后端…...

Windows 10 ARM工控主板连接I2S音频芯片

在Windows工控主板应用中&#xff0c;音频功能是一项基本的需求&#xff0c;USB声卡在x86/x64 Windows系统上就可直接免驱使用&#xff0c;但这些USB声卡通常不提供ARM上的Windows系统驱动。本文将介绍如何利用安装在ARM上的Windows工控主板——ESM8400的I2S接口、连接WM8960音…...

单元测试MockitoExtension和SpringExtension

1. MockitoExtension MockitoExtension 是 JUnit 5 提供的一个扩展&#xff0c;用于支持 Mockito 的集成。它可以自动初始化标记为 Mock、InjectMocks 等的 Mockito 对象&#xff0c;而不需要显式调用 MockitoAnnotations.initMocks(this)。 主要特点: 自动初始化 Mock、Spy…...

网络安全 | WAF防护开通流程与技术原理详解

关注&#xff1a;CodingTechWork 引言 随着互联网安全形势的日益严峻&#xff0c;Web应用防火墙&#xff08;WAF, Web Application Firewall&#xff09;逐渐成为网站和应用的标准防护措施。WAF能够有效识别和防止如SQL注入、跨站脚本攻击&#xff08;XSS&#xff09;、恶意流…...

计算机毕业设计 | SpringBoot+vue文理医院预约挂号系(附源码+论文)

1&#xff0c;绪论 1.1 研究背景与意义 信息化管理模式是将行业中的工作流程由人工服务&#xff0c;逐渐转换为使用计算机技术的信息化管理服务。这种管理模式发展迅速&#xff0c;使用起来非常简单容易&#xff0c;用户甚至不用掌握相关的专业知识&#xff0c;根据教程指导即…...

嵌入式系统可靠性设计:内存保护与硬件检测实践

1. 嵌入式系统可靠性设计概述在工业控制、医疗设备和汽车电子等关键领域&#xff0c;嵌入式系统的可靠性直接关系到人身安全和财产安全。作为一名有十年嵌入式开发经验的工程师&#xff0c;我见过太多因可靠性设计不足导致的现场故障。这些故障往往不是由复杂算法错误引起&…...

H-ui.Admin:轻量级后台开发的效率革命方案

H-ui.Admin&#xff1a;轻量级后台开发的效率革命方案 【免费下载链接】H-ui.admin 项目地址: https://gitcode.com/gh_mirrors/hu/H-ui.admin 1. 三大核心价值重新定义管理系统开发 1.1 零门槛上手&#xff1a;从环境配置到功能实现的极速体验 问题&#xff1a;传统…...

深度学习模型压缩:从理论到实践

深度学习模型压缩&#xff1a;从理论到实践 1. 背景与意义 深度学习模型在取得显著性能提升的同时&#xff0c;也带来了模型规模的急剧增长。大型模型往往需要大量的计算资源和内存&#xff0c;这限制了它们在资源受限设备上的部署。模型压缩技术的意义在于&#xff1a; 减少模…...

第二部分:为什么要引入 Harness?

一个类比:把新手丢进没有文档的项目 想象你是一个刚入职的工程师,被丢进一个没有任何文档的项目里。 没有 README,代码里没有注释,没有人告诉你怎么跑测试,CI 配置文件藏在某个角落里。你能写出好代码吗? 也许能——如果你足够聪明又足够有耐心。但你会花大量时间在&q…...

保姆级教程:用Python调用DashScope灵积模型API,5分钟搞定你的第一个AI菜谱

5分钟实战&#xff1a;用Python调用DashScope打造智能菜谱生成器 第一次接触AI模型API调用时&#xff0c;很多人会被各种术语和配置步骤吓退。但事实上&#xff0c;借助像DashScope这样的平台&#xff0c;即使是编程新手也能快速实现有趣的应用。今天我们就从一个生活化场景出…...

甩掉作图焦虑,我把商业级出图压缩到10分钟,设计团队必备AI工具推荐

作为一个在设计行业熬了快十年的工作室主理人&#xff0c;我无数次在甲方的要求下气的想撞墙——不是因为脑子里没有创意&#xff0c;而是因为团队的视觉交付效率根本跟不上客户“朝令夕改”的节奏。你如果是设计师一定懂这种窒息感&#xff1a;早会刚定下的视觉方向&#xff0…...

2025最权威的五大AI科研网站解析与推荐

Ai论文网站排名&#xff08;开题报告、文献综述、降aigc率、降重综合对比&#xff09; TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 毕业论文写作领域里人工智能技术的应用&#xff0c;带来了好多积极影响&#xff0c;明显提高…...

Java气象数据处理实战:从NC文件到JSON的完整避坑指南(附NetCDF 5.5.2配置技巧)

Java气象数据处理实战&#xff1a;从NC文件到JSON的完整避坑指南 气象数据作为科学研究和商业应用的重要基础&#xff0c;其处理流程的效率和准确性直接影响最终分析结果。NetCDF&#xff08;Network Common Data Form&#xff09;作为气象领域的标准数据格式&#xff0c;以其多…...

实战指南:基于快马平台构建centos生产环境openclaw服务化部署与监控方案

今天在InsCode(快马)平台上折腾了一整天&#xff0c;终于把openclaw在生产环境的部署方案跑通了。这个工具平时都是作为子模块使用&#xff0c;但真正要放到CentOS服务器上长期运行&#xff0c;还是有不少细节要注意的。记录下我的实战经验&#xff0c;给有类似需求的伙伴参考。…...