首页/新闻资讯/正文详情

『无为则无心』Python函数 — 30、Python变量的作用域

发布时间:2026/9/24 17:44:21 来源:云帆数科 栏目:资讯中心
『无为则无心』Python函数 — 30、Python变量的作用域
1、作用于的概念变量作用域指的是变量生效的范围, 在中一共有两种作用域。函数作用域的第二部分我们来讨论一下局部变量。所谓局部变量呢, 它就是被定义在函数体内部的那些变量, 也就是只在函数体内部有效。def testA():# 局部变量a# 在函数中为变量赋值时默认都是为局部变量赋值# 局部变量不会影响函数外的变量。a 100# 函数体内部访问能访问到a变量print(a)testA() # 100print(a) # 报错name a is not defined变量a是被定义在了testA这个函数内部的变量, 如果我们想要在这个函数的外面去访问它的话, 那么程序就会立即报错。局部变量的作用主要是在函数体的内部对数据进行临时的保存, 也就是说, 在函数调用完成之后, 就会把定义的局部变量进行销毁。3、全局变量所谓的全局变量, 实际上就是那种可以在函数体的内部起作用, 同时也可以在函数体的外部起作用的变量。咱们来思考一下, 如果有某个数据项存在这种情况, 就是这个数据既需要在函数A里面被调用去使用的, 同时这个数据也得在函数B里面被使用到的。那么在这种情况下, 究竟应该怎么办?回答这个问题的方法是, 把这个数据存储在一个被设置为全局状态的地方。# 定义全局变量aa 100def testA():print(a) # 访问全局变量a并打印变量a存储的数据def testB():print(a) # 访问全局变量a并打印变量a存储的数据testA() # 100testB() # 100我们来思考一下, 如果想要通过修改程序来满足testB函数的需求, 也就是把变量a的值改成200, 我们应该怎么去动这个代码。a 100def testA():print(a)def testB():a 200print(a)testA() # 100testB() # 200print(f全局变量a {a}) # 全局变量a 100我们需要思考的一个问题是, 在testB这个函数的内部,表达式a等于二百的这个地方, 变量a到底是不是在对全局变量a进行修改操作呢。回答是否定。通过对上述代码进行观察可以发现, 第15行获取到的变量a的数据是100, 这依然是定义全局变量a时候所对应的初始值, 该位置并没有执行返回操作。在testB函数内部的那个数是200, 综合起来看, testB函数内部的a 200这个操作其实是定义了一个局部变量。1关键字我们需要认真思考一下, 具体应当怎样在函数这个代码块的内部, 对全局变量进行修改操作。a 100def testA():print(a)def testB():# 想要修改全局变量a的值是200# global 关键字声明a是全局变量global aa 200print(a)testA() # 100testB() # 200print(f全局变量a {a}) # 全局变量a 200关键字的作用体现在它能够对函数内部的变量施加一种声明, 使得这个变量能够转变为全局变量的身份。换用一种更加直白的表述方法来说, 倘若你期望在函数的内部完成对某个全局变量数值的修改操作, 这时候就必须借助于这个关键字来正式地声明相关的变量才行。2总结4、变量的查找如果我们去拿那个变量来用, 咱们会先在当前的这个范围里头去找它, 要是找着了的话, 那就直接用。如果没有找到, 就需要继续前往上一级的作用域里面去寻找那个目标, 直到发现它的存在并且最终使用它。如果依然还是没有的话, 那就得继续去上一级的作用域里面去寻找了, 就这么一步一步地往后推下去。一直到找到了全局作用域这个层级, 可是还是没有找到的时候, 就会抛出那个异常, 它的信息是名称为a的这个东西是不存在的。# 练习说明a 10def fn2():def fn3():a 30print(fn3中:,a ,a)fn3()print(fn2中:,a ,a)fn2()输出结果fn3中: a 30fn2中: a 105、在这个作用域里面, 那个类型是可变数据类型的变量。c 10def fn4(a):# 在函数中对形参进行重新赋值不会影响其他的变量a 20print(a , a, id(a))fn4(c)print(c , c, id(c))输出结果a 20 8791349231264c 10 8791349230944# 如果形参接收到的数据是一个全局列表# 当在函数内尝试修改列表中的元素时全局列表的数据也会发生改变c [1,2,3]def fn4(a):# 如果形参执行的是一个对象当我们通过形参去修改对象时# 会影响到所有指向该对象的变量a[0] 100print(a , a, id(a))fn4(c)print(c , c, id(c))输出结果a [100, 2, 3] 5132808c [100, 2, 3] 5132808# 如果我们不向全局变量有所改动# 就需要使用我们之前学过的浅复制# 或者传入一个切片就可以解决c [1, 2, 3]def fn4(a):# 在函数中对形参进行重新赋值不会影响其他的变量a[0] 100print(a , a, id(a))fn4(c.copy())# fn4(c[:])print(c , c, id(c))输出结果a [100, 2, 3] 6050824c [1, 2, 3] 60503126、多函数程序执行流程一般在实际的开发生活当中, 有一个程序通常是由许多个函数构成的, 而且这些众多的函数会一起去共享存在的数据, 这样的情况在下述内容里可以看到。1大家可以一起来用那个全局范围内的公共变量。# 1. 定义全局变量glo_num 0def test1():global glo_num# 修改全局变量glo_num 100def test2():# 调用test1函数中修改后的全局变量print(glo_num)# 2. 调用test1函数执行函数内部代码声明和修改全局变量test1()# 3. 调用test2函数执行函数内部代码打印test2() # 1002将返回值作为参数进行传递。# 先得到函数一的返回值再把这个返回值传入到函数二def test1():return 50def test2(num):print(num)# 1. 保存函数test1的返回值result test1()# 2.将函数返回值所在变量作为参数传递到test2函数test2(result) # 50

相关推荐

没错,最强的Python编辑器还是它
没错,最强的Python编辑器还是它

为什么说才是搞的真爱,没用过的人可能体会不到所有人都在讨论, 哪一个写代码时最好用? 大家争论得非常激烈。许多人认为它是最厉害的工具。事实果真如此吗? 有人站出来说, 那个更轻巧灵活, 而且插件很多。这种说法听起来确实有道理。但是它的特点依然很突出, 它是… · 2026/9/24 17:44:21

函数:写一次代码,用一万次
函数:写一次代码,用一万次

如果你连函数都写不出来, 那么你根本就没有进入到这门学问的门槛里面去。函数, 它是编程里面的那个核心的抽象。你现在去写一个函数, 这就等于你去发明了一个新的动词。那其他的人, 包括那个未来的你自己在内, 也只需要去知道它是做什么事情的就行了。至于说它到底是怎么去做的… · 2026/9/24 17:44:21

手机就能学Python!无需高配置电脑,安卓与iOS都可以,30天通关
手机就能学Python!无需高配置电脑,安卓与iOS都可以,30天通关

许多想要进入编程行业并从头开始学习的朋友, 往往因为电脑配置方面的问题, 而感到受阻, 并停下了自己的脚步, 他们觉得必须先购买高性能的笔记本电脑或者安装复杂的操作系统之后, 才能启动他们的学习之路, 然而实际上这样做是完全没必要的, 咱们日常随身携带并且放在口袋里的手… · 2026/9/24 17:44:21

Python脉象识别系统从源码到实战:信号处理与特征分类全解析
Python脉象识别系统从源码到实战:信号处理与特征分类全解析

简介:这是一套基于Python实现的中医脉象识别系统源码,面向医疗健康领域开发者、科研人员以及对智能诊断感兴趣的Python学习者。系统覆盖从脉象信号采集、去噪滤波、特征提取到模型训练与结果输出的完整流程,内置CNN、RNN等深度学习算法&#… · 2026/9/24 18:14:04

Java毕设考勤系统全流程实战:Spring Boot+小程序从表设计到部署避坑
Java毕设考勤系统全流程实战:Spring Boot+小程序从表设计到部署避坑

简介:这是一套面向本科毕业设计的小程序上课考勤系统完整源代码,基于Spring Boot与微信小程序开发,适合Java学习者、毕设学生作为项目参考。系统实现了后台管理、小程序端GPS签到、定位打卡、迟到统计等核心考勤功能,设计获得优秀… · 2026/9/24 18:14:04

遗传算法与遗传编程预测股票价格:靠谱还是玄学?
遗传算法与遗传编程预测股票价格:靠谱还是玄学?

简介:面向量化交易与机器学习初学者,这套算法交易实验代码以苹果股价预测为场景,分别采用遗传编程和遗传算法两种进化计算策略。遗传编程通过进化基于树的种群来最小化预测价格与实际价格之间的误差,并融合纳斯达克、苹果、标普等… · 2026/9/24 18:14:04

基于YOLOv8的大熊猫实时视觉检测与AR互动系统
基于YOLOv8的大熊猫实时视觉检测与AR互动系统

简介:这是一套基于Python开发的大熊猫主题AI互动拍照系统源码,面向Web开发初学者与AI应用实践者,聚焦于计算机视觉与Web服务的融合落地。项目采用Flask或Django框架构建后端服务,集成姿态识别、风格迁移(CartoonGAN&am… · 2026/9/24 18:14:04

C#超市收银系统源码解析:事务扣库存与WinForm实战链路
C#超市收银系统源码解析:事务扣库存与WinForm实战链路

简介:这是一套面向计算机专业本科生与毕业设计初学者的C#超市收银管理系统源码,聚焦零售场景下的收银流程优化与后台管理实践,助力开发者掌握企业级桌面应用开发全流程。资源共271个文件,包含106个核心业务逻辑.cs文件、27个运行依… · 2026/9/24 18:14:04

基于SpringBoot的宠物救助及领养平台的设计与实现-附源码
基于SpringBoot的宠物救助及领养平台的设计与实现-附源码

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台… · 2026/9/24 18:13:46

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程
基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为… · 2026/9/24 0:00:13

1D-CNN时间序列建模实战:从Conv1d原理到工业落地
1D-CNN时间序列建模实战:从Conv1d原理到工业落地

简介:面向时间序列数据建模的一维卷积神经网络完整实现,适合深度学习入门者及需要快速验证时序模型的研究者,能够从音频、文本、传感器或股价等序列中挖掘局部特征与时间依赖。压缩包体积很小,只有3KB,内含3个Python脚… · 2026/9/24 0:00:26

柔软的L:汉语语流中被忽视的舌肌张力控制
柔软的L:汉语语流中被忽视的舌肌张力控制

1. 这个“L”不是字母表里的L,而是舌尖上的L最近在几个方言群和语音教学社群里,反复看到有人发一句:“也说字母L:柔软的长舌”。初看以为是英语发音课笔记,点开才发现全是方言爱好者、播音系学生、语言康复师甚至戏曲演… · 2026/9/24 0:00:44

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码