Python作用域知识梳理

news/2025/10/3 0:08:12/文章来源:https://www.cnblogs.com/wgqy/p/19124155
作用域指变量 / 函数的 “有效访问范围”,Python 按 “就近原则” 查找变量,核心分为 4 类,关键规则用 “查找顺序” 和 “修改权限” 两点讲透:
 

一、4 类基本作用域(LEGB 查找顺序)

Python 访问变量时,会按以下顺序逐层查找,找到即停止,找不到则报错:
 
  1. L(Local,局部作用域):函数 / 方法内部定义的变量(如函数内用 a = 1 定义的变量),仅在当前函数内有效。
  2. E(Enclosing,嵌套作用域):外层嵌套函数的作用域(如函数 A 里嵌套了函数 B,B 可访问 A 内定义的变量)。
  3. G(Global,全局作用域):单个 .py 文件内、所有函数 / 类之外定义的变量(如文件最顶部写 a = 1),整个文件内的函数 / 类可访问。
  4. B(Built-in,内置作用域):Python 自带的内置函数 / 变量(如 print()len()True),无需定义可直接用。
 

二、核心规则:“读” 和 “改” 的权限差异

这是最容易踩坑的点,关键看变量是 “读取值” 还是 “修改值”:
 

1. 读取变量:默认按 LEGB 顺序查找,无需额外声明

  • 局部作用域可直接读嵌套 / 全局 / 内置变量(只要外层有定义)。
     
    例:
     
    global_a = 10  # 全局变量
    def func():print(global_a)  # 读全局变量,无需声明,输出 10
    func()

2. 修改变量:必须用关键字声明 “要修改的是外层作用域变量”

  • 修改全局变量(Global):函数内要给全局变量赋值(如 global_a = 20),必须先写 global 变量名 声明,否则会被当成 “局部变量”。
     
    例(正确写法):
     
    global_a = 10
    def func():global global_a  # 声明“要修改全局变量”global_a = 20    # 真正修改全局变量
    func()
    print(global_a)  # 输出 20
     
  • 修改嵌套作用域变量(Enclosing):Python 3 用 nonlocal 变量名 声明(Python 2 无此关键字),作用是 “修改外层嵌套函数的变量”,而非创建局部变量。
     
    例:
     
    def outer():enclosing_a = 10def inner():nonlocal enclosing_a  # 声明“要修改嵌套变量”enclosing_a = 20inner()print(enclosing_a)  # 输出 20(嵌套变量被修改)
    outer()
     
  • 局部变量(Local):直接赋值即可,无需声明(如 local_a = 5),仅在当前函数内有效。
 

三、常见误区总结

  1. 误区:“同一文件内的全局变量,函数里直接赋值就能改” 
    错!不写 global 时,函数内的 变量名 = 值 会创建 “局部变量”,和外层全局变量同名但无关,相当于 “新变量覆盖了外层变量的访问”。
  2. 误区:“只有跨文件才需要 global” 
    错!global 作用是 “告诉 Python:我要改的是当前文件的全局变量”,和是否跨文件无关,仅和 “是否在函数内修改全局变量” 有关。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/925432.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

海拉尔网站建设sjteam网站怎么做301跳转

一、说明 Nacos如果是手动启动的话,在服务器宕机或者重启后,没有自动运行,影响很多业务系统,需要每次手动执行命令 startup.sh -m standalone,才能启动 Nacos 服务,不能像docker服务一样,使用 …

如何做网站管理一元购物网站建设

石家庄铁道大学毕业论文旋转机械转子不对中故障诊断技术研究Study on Fault Diagnosis for Rotor Misalignmentof Rotating Machinery2015 届 机械工程 学院专 业 机械设计制造及其自动化 学 号 学生姓名 邵阳鑫 指导教师 申永军完成日期 2015年 5 月 29 日摘要不对中故障是旋转…

网页设计制作网站教程怎么做公司的网站

事务四大特性 原子性(Atomicity) 事务中的所有操作要么全部完成,要么全部不执行。如果事务中的任何一步失败,整个事务都会被回滚,以保持数据的完整性。 一致性(Consistency) 事务应确保数据库…

网站首页设计布局潍坊网站开发公司

第一步配置域名 :在微信公众平台登录后配置服务域名称:https://apis.map.qq.com 第二步申请密钥 申请开发者密钥申请地址 第三步使用插件 选择添加插件 搜索腾讯位置服务地图选点 选择要授权的小程序 授权完毕会在这里显示插件信息 第四步查看使用文档 跳转至文…

湖南响应式网站推荐长沙大型网站设计公司

文章目录 Redis 事务1)基本认识2)事务操作1.MULTI2.EXEC3.错误处理4.DISCARD5.WATCH6.SCRIPT Redis 事务 官方文档,永远是你学习的第一手资料:Redis 事务 1)基本认识 谈到事务,大家首先都会联想到 mysql 中复杂但又功能强大的“事务”&…

网站开发培训周末班网站模仿算侵权吗

文章目录一、环境分布1. 版本声明2. 依赖2. case测试2. case2测试一、环境分布 1. 版本声明 linux服务器软件版本jdk1.8kafkakafka_2.13-2.4.0注:建议版本和应用依赖的客户端版本依赖保持一致,如果需要更高版本,可以尝试 但是有一点&#x…

从网站栏目看网站功能兰州seo整站优化服务商

SVN 1、SVN和Git的区别 SVN是集中式的,也就是会有一个服务器保存所有代码,拉取代码的时候只能从这个服务器上拉取;Git是分布式的,也就是说每个人都保存有所有代码,如果要获取代码,可以从其他人手上获取SV…

开个网站多少钱一年学校网站源码

heap【堆】掌握 手写上浮、下沉、建堆函数 对一组数进行堆排序 直接使用接口函数heapq 什么是堆???堆是一个二叉树。也就是有两个叉。下面是一个大根堆: 大根堆的每一个根节点比他的子节点都大 有大根堆就有小根堆&#xff1…

go mod 面试题

go mod 有哪些命令都有什么作用 Go Mod 常用命令及功能一览 go mod 是 Go 语言从 1.11 版本开始引入的官方依赖管理工具,用于初始化、创建和维护项目的 go.mod 文件,管理项目的依赖关系。 以下是 go mod 最核心、最常…

做学校子网站抖音代运营违法吗

body{margin:8px;} iframe{border:2px;} th,td{padding:1;} table{border-spacing:2px;border-collapse:separate;} dfn{斜体} <dfn> 标签可标记那些对特殊术语或短语的定义。 现在流行的浏览器通常用斜体来显示 <dfn> 中的文本。将来&#xff0c;<dfn> 还可…

网站报名系统怎么做wordpress 点击量

一般是三种方法&#xff1a;(1)用vector的vector&#xff0c;(2)先分配一个指针 数组&#xff0c;然后让里面每一个指针再指向一个数组&#xff0c;这个做法的好处是访问数组元素时比较直观&#xff0c;可以用a[x][y]这样的写法&#xff0c;缺点是它相当于C#中的一个锯齿 数组&…

多轮对话系统设计的逻辑陷阱与解决方案

一、引言:对话系统的复杂性挑战 随着GPT-5等大模型技术的成熟,多轮对话系统在客服、教育、医疗等领域的应用日益广泛。然而,根据2025年MIT人机交互实验室的研究显示,78%的对话系统故障源于设计逻辑缺陷而非技术限制…

手机免费建立网站wordpress 旋转预加载

目录 一、前菜 1、Python选择 2、pip源切换 3、ffmpeg配置问题 4、VSCode添加Jupyter扩展 二、配置虚拟环境 1、下载源码 方法一 直接下载源码压缩包 方法二 使用git 1&#xff09;git加入鼠标右键 2&#xff09;git clone源码 2、VSCode出场 1&#xff09;创建pyth…

网站综合查询工具在谷歌上怎么做网页

默默地EEer&#xff0c;原文地址&#xff1a; http://www.cnblogs.com/hebaichuanyeah/p/5625233.html 职责链模式指使多个对象多有机会处理请求&#xff0c;避免请求发送者和接受者的耦合关系。 将这些接受处理的对象连成一条链&#xff0c;并沿着该链处理请求。 一个传说中的…

c 教程如何做网站茶叶市场网站建设方案

“开始”-->“运行”-->“cmd”打开命令提示符&#xff0c;&#xff08;或win R&#xff09;输入“netstat -ano”可以看到所有的连接。可能的话&#xff0c;在“windows任务管理器”找到PID对应的程序即可。如果没有PID项&#xff0c;可以在“windows任务管理器”选“查…

app界面生成器网站seo网络优化公司

spring-boot项目搭建一、从官网搭建1、进入spring官网&#xff0c;快速初始化一个项目2、填写项目基本信息3、项目结构分析4、添加项目依赖5、下载到本地6、解压7、idea&#xff0c;打开&#xff0c;使用maven构建项目8、使用maven构建9、这是构建好的&#xff0c;其它目录全部…

嘉兴网站seo外包百度网站提交

1.概念 有监督学习正向传播&#xff1a;输入样本---输入层---各隐层---输出层反向传播&#xff1a;误差以某种形式在通过隐层向输入层逐层反转&#xff0c;并将误差分摊给各层的所有单元&#xff0c;以用于修正各层的权值激活函数&#xff1a;也叫阶跃函数&#xff0c;目的是引…

【光照】[PBR][菲涅尔]实现方法对比

Unity URP中的菲涅尔效应主要采用Schlick近似模型,通过三步流程实现:确定基础反射率F₀、角度依赖计算和金属/非金属处理。该模型以1次pow运算实现高性价比的实时渲染,视觉误差小于2%,并与GGX+Smith模型完美配合。…

专做展厅设计网站专业网站优化seo

信息流广告是什么 “今日头条和百度必有一战”&#xff0c;相信不少的互联网人在过去几个月都听到过类似的断言。定位于信息分发平台的今日头条和主营搜索业务的百度会产生如此大的利益冲突&#xff0c;最核心的点其实就是信息流广告。 信息流广告指的是在用户使用互联网产品或…