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

Python中变量的作用域精讲

文章目录

  • 前言
  • 一、局部变量
  • 二、全局变量


前言

  变量的作用域是指程序代码能够访问该变量的区域,如果超出该区域,再访问时就会出现错误。在程序中,一般会根据变量的 “有效范围” 将变量分为 “全局变量” 和 “局部变量”。


一、局部变量

  局部变量是指在函数内部定义并使用的变量,它只在函数内部有效。即函数内部的名字只在函数运行时才会创建,在函数运行之前或者运行完毕之后,所有的名字就都不存在了。所以,如果在函数外部使用函数内部定义的变量,就会出现抛出 NameError 异常。
  例如,定义一个名称为 function 的函数,在该函数内部定义一个变量 poem(称为局部变量),并为其赋值,然后输出该变量,最后在函数体外部再次输出 poem 变量,代码如下:

def function():poem = '面朝大海,春暖花开'print('局部变量poem = ', poem)  # 输出局部变量的值
function()  # 调用函数
print('局部变量poem = ', poem)  # 在函数体外输出局部变量的值

  运行上面的代码将显示如下图所示的异常。

在这里插入图片描述


二、全局变量

  与局部变量对应,全局变量能够作用于函数内外的变量。全局变量主要有以下两种情况:
  (1) 如果一个变量,在函数外定义,那么不仅在函数外可以访问到,在函数内也可以访问到。在函数体以外定义的变量是全局变量
  例如,定义一个全局变量 poem,然后再定义一个函数,在该函数内输出全局变量 poem 的值,代码如下:

poem = '花有重开日,人无再少年'  # 全局变量
def function():print('函数体内:全局变量poem =', poem)  # 在函数体内输出全局变量的值
function()  # 调用函数
print('函数体外:全局变量poem =', poem)  # 在函数体外输出全局变量的值

  运行上面的代码,将显示以下内容:

函数体内:全局变量poem = 花有重开日,人无再少年
函数体外:全局变量poem = 花有重开日,人无再少年

说明当局部变量与全局变量重名时,对函数体的变量进行赋值后,不影响函数体外的变量。也就是各敲各的锣,各打各的鼓

  例如,在函数体外定义一个全局变量 a,并赋值为 100,在函数体内定义一个局部变量 a,并赋值为 10,代码如下所示:

a = 100  # 定义一个全局变量
def function():a = 10  # 定义局部变量print(a)  # 输出局部变量的值
function()  # 调用函数
print(a)  # 输出全局变量的值

  执行结果如下所示:

10
100

  (2) 在函数体内定义,并且使用 global 关键字修饰后,该变量也就变为全局变量。在函数体外也可以访问到该变量,并且在函数体内还可以对其进行修改
  例如,在函数体内定义一个变量,使用 global 关键字修饰。代码如下所示:

poem = '天若有情天亦老,人间正道是沧桑'  # 全局变量
print('函数体外:poem =', poem)  # 在函数体外输出全局变量的值
def function():global poem  # 将poem声明为全局变量poem = '人生得意须尽欢,莫使金樽空对月'  # 全局变量print('函数体内:poem =', poem)  # 在函数体内输出全局变量的值
function()  # 调用函数
print('函数体外:poem =', poem)  # 在函数体外输出全局变量的值

  运行上面的代码,将显示以下内容:

函数体外:poem = 天若有情天亦老,人间正道是沧桑
函数体内:poem = 人生得意须尽欢,莫使金樽空对月
函数体外:poem = 人生得意须尽欢,莫使金樽空对月

  从上面的结果中可以看出,通过 global 关键字修饰的全局变量,是可以在函数体内部修改全局变量的值。

说明尽管Python允许全局变量和局部变量重名,但是在实际开发时,不建议这么做,因为这样容易让代码混乱,很难分清哪些是全局变量,哪些是局部变量。

相关文章:

Python中变量的作用域精讲

文章目录前言一、局部变量二、全局变量前言 变量的作用域是指程序代码能够访问该变量的区域,如果超出该区域,再访问时就会出现错误。在程序中,一般会根据变量的 “有效范围” 将变量分为 “全局变量” 和 “局部变量”。 一、局部变量 局部变…...

数据仓库工程师的工作职责的相关介绍

1. BI 开发工程师的工作内容是什么? BI开发工程师(Business Intelligence Developer)是负责设计和开发企业级BI系统的专业人员。他们的主要工作是从多个数据源中提取、转换、加载和分析数据,以支持企业决策。以下是BI开发工程师的…...

ESP UART 介绍

1 UART 介绍 UART 是一种以字符为导向的通用数据链,可以实现设备间的通信。异步传输的意思是不需要在发送数据上添加时钟信息。这也要求发送端和接收端的速率、停止位、奇偶校验位等都要相同,通信才能成功。 1.1 UART 通信协议 一个典型的 UART 帧开始…...

第十三届蓝桥杯省赛Python大学B组复盘

目录 一、试题B:寻找整数 1、题目描述 2、我的想法 3、官方题解 4、另解 二、试题E:蜂巢 1、题目描述 2、我的想法 3、官方题解 三、试题F:消除游戏 1、题目描述 2、我的想法(AC掉58.3%,剩下全超时&#x…...

linux入门---vim的配置

这里写目录标题预备知识如何配置vimvim一键配置预备知识 在配置vim之前大家首先得知道一件事就是vim的配置是一人一份的,每个用户配置的vim都是自己的vim,不会影响到其他人,比如说用户xbb配置的vim是不会影响到用户wj的,虽然不同…...

Python简写操作(for、if简写、匿名函数)

Python简写操作(for、if简写、匿名函数)1. for 简写1.1 一层 for 循环1.2 两层 for 循环2. if 简写3. for 与 if 的结合简写4. 匿名函数 lambda1. for 简写 举个例子: y [1, 2, 3, 4, 5, 6] result [(i * 2) for i in y] print(result)# …...

毕业设计常用模块之温湿度模块DHT11模块使用

DHT11是一款可以测量温度数据和湿度数据的传感器 产品特点 暖通空调、除湿器、农业、冷链仓储、测试及检测设备、消费品、汽车、自动控制、数据记录器、气 象站、家电、湿度调节器、医疗、其他相关湿度检测控制 外形尺寸 第3管脚:NC 是没有用的 典型电路 通信方式…...

Cadence Allegro 导出Design Rules Net Shorts Check(DRC)Report报告详解

⏪《上一篇》   🏡《上级目录》   ⏩《下一篇》 目录 1,概述2,Design Rules Net Shorts Check(DRC)Report作用3,Design Rules Net Shorts Check(DRC)Report示例4,Design Rules Net Shorts Check(DRC)Report导出方法4.1,方法14.2,方法2...

第 46 届世界技能大赛浙江省选拔赛“网络安全“项目C模块任务书

第46届世界技能大赛浙江省选拔赛"网络安全"项目C模块(夺旗行动(CTF)挑战)第46届世界技能大赛浙江省选拔赛"网络安全"项目C模块第一部分 WEB第二部分 CRYPTO第三部分 REVERSE第四部分 MISC第五部分 PWN第46届世…...

C++:详解C++11 线程(一):MingGW 各版本区别及安装说明

MingGW 各版本区别一:MinGW、MinGW-w64 简介二:MinGW 各版本参数说明三:下载解压一:MinGW、MinGW-w64 简介 MinGW(全称为 Minimalist GNU for Windows),它实际上是将经典的开源 C 语言编译器 G…...

第十二章 ArrayList和 LinkedList的区别

ArrayList:基于动态数组(自动扩容),连续内存存储,由于底层是数组,适合使用下标进行访问,但扩容一直都是数组的缺点,所以使用尾插法进行扩容可以有效提高扩容效率。还有就是创建Array…...

案例06-复用思想的接口和SQL

目录 一:背景介绍 二:思路&方案 三:过程 1.Controller层接口的复用 2.Mapper层sql语句的复用 四:总结 一:背景介绍 我们在开发项目的过程中非常容易出现的一种现象就是用什么我就直接写什么,就像我…...

【Java学习笔记】17.Java 日期时间(2)

前言 本章继续介绍Java的日期时间。 Calendar类 我们现在已经能够格式化并创建一个日期对象了,但是我们如何才能设置和获取日期数据的特定部分呢,比如说小时,日,或者分钟? 我们又如何在日期的这些部分加上或者减去值呢? 答案…...

【学习Docker(八)】Docker Canal的安装与卸载

座右铭:《坚持有效输出,创造价值无限》 最近想了解下canal,自行搭建并完成数据同步。经过了几天的踩坑之旅,今天终于搭建成功了。 环境:canalv1.1.5、MySQL8.0、JDK1.8 安装MySQL 创建存放目录 mkdir /docker-localm…...

python的django框架从入门到熟练【保姆式教学】第三篇

在前两篇博客中,我们介绍了Django框架的模型层和数据库迁移功能。本篇博客将重点介绍Django的视图层(View),并讲解如何创建视图函数和URL路由。 视图层(View) Django的视图层是Django应用程序的另一个核心…...

Open3D(C++) Ransac拟合球体(详细过程版)

目录 一、算法原理1、计算流程2、参考文献二、代码实现三、结果展示一、算法原理 1、计算流程 空间球方程: ( x − a ) 2 + ( y − b...

Antlr Tool与antlr runtime的版本一致性问题

1. 意外的问题 在学习Antlr4的visitor模式时,使用IDEA的Antlr插件完成了Hello.g4文件的编译,指定的package为com.sunrise.hello 使用visitor模式遍历语法解析树,遍历过程中打印hello语句 public class HelloVisitorImpl extends HelloBaseVi…...

嵌入式中CAN测试自动化方法分析

can的基础知识 CAN是什么? CAN 是 Controller Area Network 的缩写(以下称为 CAN),是 ISO*1 国际标准化的串行通信协议在当前的汽车产业中,出于对安全性、舒适性、方便性、低公害、低成本的要求,各种各样的电子控制系统被开发了出来。由于这些系统之间通信所用的数据类…...

基于c++、opencv、cuda、Visual Studio编程

一、前言 opencv自带的支持的cuda的函数不少,但是不一定够用,而且已经支持的函数有些还不是十分的完善。所以更多的时候还需要编写自己的kernel以进行加速自定义处理。如果基于opencv进行计算机视觉相关开发工作,那么熟悉c++、opencv、cuda编程是避免不了的环节。 二、准备工…...

MATLAB——DFT(离散傅里叶变换)

题目1: 已知有限长序列x(n)为: x(n)[0,1,2,3,4,5,6,7,8,9],求x(n)的DFT和IDFT。要求 1)画出序列傅里叶变换对应的|X(k)|和arg[X(k)]图形。 2)画出原信号与傅里叶逆变换IDFT[X(k)]图形进行比较。 知识点: DF…...

ClickHouse性能优化:OLAP数据库实战,让查询飞起来

**作者:洛水石** | **更新日期:2026-05-11** | **标签:ClickHouse | OLAP | 数据库优化 | 大数据**前言上个月,运营同学找我抱怨:每天凌晨的报表查询要等5分钟才能出来,数据量大的时候直接超时。作为DBA&am…...

嵌入式开发实战:从ADC纹波故障看系统集成调试与EMC设计

1. 项目背景与问题缘起:当“新”设备遭遇“老”问题在工业设备开发领域,尤其是像线锯这类集精密机械、复杂电气和嵌入式软件于一体的复杂系统,有一个经典且令人头疼的场景:一款经过验证的成熟产品平台,在衍生出新机型或…...

在Nodejs后端服务中集成Taotoken调用大模型API

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 在Nodejs后端服务中集成Taotoken调用大模型API 对于Node.js后端开发者而言,将大模型能力集成到服务中已成为构建智能应…...

应用间自动化网关:构建私有化、可编程的跨平台工作流中枢

1. 项目概述与核心价值最近在折腾一些跨平台、跨设备的自动化流程,发现一个痛点:不同应用、不同服务之间的数据流转,经常需要手动“搭桥”。比如,想把手机上的一个链接快速推送到电脑上处理,或者把某个文档从A服务同步…...

基于MCP与Apify的ESG供应链风险智能评估工具实战指南

1. 项目概述:一个为AI工作流赋能的ESG供应链风险智能评估工具 如果你是一名ESG分析师、供应链合规官或者投资经理,那么你一定对“供应商ESG尽职调查”这件事又爱又恨。爱的是,它确实能帮你识别潜在的环境、社会和治理风险,避免“…...

抖音无水印视频下载终极指南:免费批量保存高清内容

抖音无水印视频下载终极指南:免费批量保存高清内容 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback support.…...

工业DC-DC电源模块性能选型解析|钡特电源 VB15-48S24MD 与 URB4824YMD-15WR3 封装互通

在工业控制、通信设备、仪器仪表等领域,工业 DC-DC 模块电源作为核心供电单元,其稳定性、兼容性与性价比直接影响系统整体可靠性。随着国产化进程加速,国产工业电源模块在技术、品质上已达到国际先进水平,成为硬件工程师选型的重要…...

MathType 快捷键实战指南——数学建模效率飙升的秘诀(从入门到精通)

1. 为什么你需要掌握MathType快捷键? 如果你经常需要处理数学公式,肯定遇到过这样的场景:为了输入一个简单的积分符号,不得不从工具栏里翻找半天;调整公式对齐时反复用鼠标拖动;修改矩阵维度时逐个单元格调…...

C语言编写轻量爬虫工具

当我们要使用C语言编写一个定制化轻量爬虫工具,得需要结合网络请求、HTML解析和数据处理等步骤。由于是轻量级,正常情况下我们将使用C语言标准库以及一些第三方库来简化开发。这样省时省力,生态丰富可以帮助大家少走很多弯路。具体细节可以看…...

WaveTools终极指南:免费解锁鸣潮120FPS帧率限制的完整方案

WaveTools终极指南:免费解锁鸣潮120FPS帧率限制的完整方案 【免费下载链接】WaveTools 🧰鸣潮工具箱 项目地址: https://gitcode.com/gh_mirrors/wa/WaveTools WaveTools是一款专为《鸣潮》PC版设计的开源工具箱,通过创新技术方案帮助…...