学习记录-Python的局部变量和全局变量

PV-RCNN实战:如何在KITTI数据集上实现3D目标检测(附完整代码解析) 本文提供了在KITTI数据集上实战PV-RCNN 3D目标检测的完整指南,涵盖环境配置、数据预处理、模型训练与评估全流程。通过详细的代码解析和调参技巧,帮助读者掌握这一融合点与体素优势的经典3D目标检测模型,并实现从理论到实践的跨越。 阅读详情

1 定义

  • 在被调用函数内赋值的变量是局部变量

  • 在所有函数之外赋值的变量是全局变量

当一个函数被调用的时候,就会创建一个局部作用域,在这个函数内的所有变量都存在于该局部作用域内(global的变量除外),该函数返回时,这个局部作用域被销毁,这个局部作用域内的局部变量随之丢失

2 作用域的重要性

  1. 全局作用域中的代码不能使用任何局部变量

  2. 局部作用域中的代码可以访问全局变量

  3. 一个函数的局部作用域中的代码,不能使用其他局部作用域中的变量

  4. 在不同的作用域中,可以使用相同的名字命名不同的变量

下面根据具体代码举例说明

2.1 全局作用域中的代码不能使用任何局部变量
def spam():
    egg = 'this is in function spam'
    
spam()
print(egg)

在函数spam()(局部作用域)中给egg赋值,然后在全局作用域中调用函数spam()

运行后显示,egg未被定义

egg是局部变量,而print(egg)中的变量egg是全局变量,全局作用域中的代码不能使用局部作用域中的变量

这一点我理解为:在调用子函数spam()时,创建了一个局部作用域,并在局部作用域中定义了一个局部变量,当子函数调用结束后,局部作用域和内部定义的局部变量一起没销毁,因此在全局作用域中,找不到egg这个局部变量

2.2 局部作用域中的代码可以访问全局变量
def spam():
    print(egg)

egg = 'Outside the function'
spam()

全局变量在声明或赋值时被创建,直到程序被终止或执行结束

如果在egg赋值前调用函数

def spam():
    print(egg)

spam()
egg = 'Outside the function'

这时候会显示变量未被定义

2.3 不同局部作用域中的变量不能相互调用
def spam():
    print(egg)

def init():
    egg = 'this is in init funcion'

init()
spam()

2.4 在不同的作用域中,可以使用相同的名字命名不同的变量
def spam():
    egg = 'this is in spam function'
    print(egg)

def init():
    egg = 'this is in init funcion'
    print(egg)

#egg = 'Out side function'
#print(egg)
init()
spam()

两个子函数中都定义了变量egg,但在打印时,互不影响

3 全局变量与局部变量同名

在上面说到,可以在局部作用域中调用全局变量,并且在给出的例子中,我们的子函数中只有一个print操作,但如果一个变量既在全局作用域中定义,又在局部作用域中定义,那么会出现什么样的打印结果

def spam():
    egg = 'this is in spam function'
    print(egg)

def init():
    egg = 'this is in init funcion'
    print(egg)

egg = 'Out side function'
print(egg)
init()
spam()

这里我的理解是:在局部作用域要对一个变量进行操作,Python会先在当前局部作用域查找有没有声明这个变量,如果有,就优先使用当前局部作用域中的变量,如果当前局部作用域作用域中没有,才会去全局作用域中寻找

4 global

global允许在局部作用域中声明全局变量

def spam():
    global egg
    egg = 'In spam function'

spam()
print(egg)

通过使用global语句在局部作用域中声明了一个全局变量egg,当函数spam()调用结束后变量egg并未随之销毁

5 全局变量和局部变量的优先级

在上面的例子中说过,如果在全局变量和局部变量同名,那么局部作用域中会优先处理在当前作用域中声明的的变量

用下面的例子进一步说明这个问题

def spam():
    print(egg)
    egg = 'In spam function'

egg = 'Out side function'
spam()

报错显示局部变量在赋值前被引用,就像前面所说,当在局部作用域中处理一个变量时,Python会先查看这个变量是否在局部作用域中进行声明,然后在会在全局作用域中查找这个变量的声明

参考内容

《Python编程快速上手》

Ai数字人直播系统源码部署 虚拟形象定制,直播内容智能生成,多语言支持,智能互动,声音克隆,24 小时不间断直播,多平台直播,智能数据分析,实时情感识别,视频合成,Ai数字人直播系统源码出售,Ai数字人直播系统源码部署实现 AI 数字人 24 小时不间断直播功能是一个较为复杂的任务,涉及到多个方面,如直播流的推送、内容的持续生成、系统的稳定性保障等。以下为你提供一个简化的实现思路和示例代码,借助 Python 结合 FFmpeg 工具来模拟 24 小时不间断直播。 阅读详情

相关推荐

特斯拉 Model 3解析(八)全面拆解特斯拉自动驾驶大脑:AP控制器硬核技术解析

算力极限:双FSD = 144 TOPS,专为AI推理优化。存储架构:LPDDR4 + NAND + NOR,保证高速/可靠启动。通信架构:以太网传视频,CAN传控制,TSN保障实时性。感知输入:多路摄像头 + 高速SerDes,满足全景感知。电源设计:功率模块+被动元件海洋,稳定性优先。功能安全:双芯片冗余 + GPS + 紧急呼叫,容错率极高。🎯 在我看来,特斯拉AP控制器就是一台“车载超算”,它在电源设计、存储架构和功能安全上远超一般新势力方案。

weixin_43199439的博客 1445

作用域 (局部作用域和全局作用域) 详细介绍

一、作用域 1、什么是作用域(Scope) 通常来说,一段程序代码中所用到的名字不总是有效和可用的,而限定这个名字的可用性的代码范围就是这个名字的作用域。 JS作用域:就是代码名字(变量)作用的范围 作用域的目的:是为了提高程序的可靠性,更重要的是减少命名冲突 2、JS的作用域的分类(ES6之前) JS作用域可以分为两大类:全局作用域 、局部作用域(函数作用域) (一)全局作用域:   直接编写在 script 标签之中的JS代码,都是全局作用域;   或者是一个单独的 JS 文件中的。.

wz__QWERTY的博客 1万+

PyTorch实战:手把手教你用QAT量化感知训练拯救模型精度(附避坑指南)

本文详细介绍了如何使用PyTorch进行QAT量化感知训练,以提升模型在边缘设备上的推理精度。通过核心原理讲解、实战代码示例和避坑指南,帮助开发者掌握从环境配置、模型训练到边缘部署的全流程,有效解决传统量化方法导致的精度损失问题。

c7d8e的博客 329

局部变量与全局变量同名时如何在局部变量的作用范围内访问全局变量?

怎么做:当局部变量与全局变量同名时在局部变量的作用域内,可以通过关键字this来引用成员变量。 特别注意:关键字this代表的是一个对象,只能用在非静态中,不能用在静态中,因为在静态中this可能是类名也可能是对象,因此在编译时会报错,如果需要,可以通过对象去访问成员变量 代码说明: public class Test { int x=1; static void show() { int x=2; System.out.println("局部变量:"+x); //System.ou

weixin_42867975的博客 3832

Ansys-结构动力学分析-圆柱斜齿轮模态分析学习心得

模态分析的步骤基本一直,不同点在于选择什么单元类型,模型,节点约束等 圆柱斜齿轮模态分析的难点在于圆柱斜齿轮的模型建立,和所要约束的节点的选择。 用命令流方法建立齿轮模型效率较高,当然,在ansys里建立复杂的模型实在不敢恭维,对于自下而上建模,需要知道每个关键点的坐标位置。下图是创建圆柱斜齿轮模型的命令流方式。 模型不同使用的数据也就不同了。 对于施加约束的问题这就必须要熟悉select e...

weixin_45385183的博客 1831

SpringBoot文件上传实战:MultipartFile重复读取的3种方法(附避坑指南)

本文详细介绍了SpringBoot中处理MultipartFile重复读取的3种实用方法,包括字节数组缓存法、临时文件法和流重置法,并提供了避坑指南和性能优化技巧。特别适合需要多次读取上传文件内容的开发者,帮助解决InputStream流只能读取一次的问题。

weixin_28710999的博客 398

C++中作用域限定符"::"

C++中作用域限定符   在不同作用域内声明的变量可以同名,但如果局部变量和全局变量同名,在局部变量作用域内如何访问全局变量?C语言没有提供同名情况下访问全局变量的方法。在C++中,可以通过使用作用域限定符(::)(scope resolution operator)来区别同名的全局变量     例2-27 在局部变量作用域内利用作用域限定符访问同名的全局变量 Cp

android移动设备 4658

大模型复杂问答能力评测框架:从原理到实践

在人工智能领域,大语言模型(LLM)的评估是衡量其实际应用价值的关键环节。其核心原理在于通过系统化的评测框架,对模型的理解、推理、整合与表达能力进行量化分析。传统的NLP基准测试往往侧重于事实性检索或简单推理,难以全面反映模型在应对多跳推理、隐含条件、长上下文整合等复杂现实任务时的真实性能。因此,专门针对复杂问答设计的评测技术应运而生,其价值在于为模型选型、效果优化和瓶颈诊断提供数据驱动的科学依据。该技术广泛应用于需要深度逻辑判断的业务场景,如智能投顾、法律咨询、医疗诊断等。本文聚焦的`tan92hl/Co

weixin_28679635的博客 362

作用域之全局变量和局部变量

啥是作用域:一句话概括就是变量和函数的可访问范围 作用域分为三种:全局作用域(全局变量),局部作用域(局部变量),块级作用域(es6新增) 什么是全局变量(在函数外定义的变量) 什么是局部变量(在函数内定义的变量) 为什么刚学习js的时候都说要少用全局变量呢?因为全局变量可以被每个函数调用,可能不经意的修改就影响到其他函数 var num=1; if(1==1){ var num=2; ...

chenxiang0708的博客 3680

046篇:数据统计:分组、求和、平均值、最大最小值

本文介绍了在RPA中实现数据分组统计的方法。通过字典+循环组合,可以完成按单字段或多字段的分组聚合操作,包括求和、计数、求平均值及最大/最小值等。文章详细讲解了分组统计的原理,并提供了单级分组、多级分组的具体实现步骤,最后通过销售数据按月分组的实战案例,演示了如何从原始数据到生成汇总报表的完整流程。这些方法可以灵活应用于各类数据统计分析场景。

weixin_59649563的博客 214

AD快速上手笔记

本文详细介绍了使用Altium Designer从零创建PCB项目全流程:新建工程、绘制原理图(元件放置、连线、电源端口)、编译检查、生成PCB、布局布线(含铺铜)、DRC检查及输出Gerber与钻孔文件。重点强调了库选择、参数修改、层切换、铺铜设置和生产文件导出规范,确保设计无误,便于顺利下单生产。

qq_53529450的博客 42

【Python进阶实战】全局变量的进阶使用(线程并发)

IDE版本:PyCharm 2023.3.2Python演示版本: 3.12.12023年下半年,接了一个视觉高速动态实时识别的项目,使用的是YOLOv5s进行动态识别。项目初期,经过多次多环境高复杂程度测试,结论:识别速度远小于视频流每一帧的速度所以在开发之前,先预设好开发架构。此次开发不采用逐帧识别法,开发方案定位是抽帧识别法(成本与效率之间的折中考量)。本次不讨论如何识别(在后续的博客里会发布,请订阅python栏目python栏目订阅点我这次讨论的内容是如何在。

qq_21609191的博客 1355

UDF学习(四)FLUENT UDF-DEFINE_PROFILE宏

利用DEFINE_PROFLILE可以指定以下边界或计算域信息:DEFINE_PROFILE(name,t,i)//既可以用。

weixin_44386973的博客 1806

python 全局变量和局部变量学习记录

一般假如在函数中定义了同名的局部变量和全局变量,在函数中对该变量做的变化不会反映到全局变量身上。def test2(st): st = 'hello' return st st = 'hehe' print(st) print(test2(st)) print(st)hehe hello hehe而假如该变量为可变类型如list时,def test(lis): l...

等风来ing 的博客 333

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Python学习记录W3-15:全局变量和局部变量

# Author: Allenlee school = "Oldboy edu" def change_name(name): global school school = "Mage Linux" #修改全局变量 print("before change",name) name = "Alex li" #这个函数就是这个变量的作用域 ...

up1292的博客 140

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

2021小白Python学习记录Day5 Python函数学习 下(全局变量和局部变量 函数参数引用传值 匿名函数 递归函数)

python全局变量和局部变量、python函数参数引用传值、python匿名函数 python递归函数

阿左.的博客 283

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

零基础大龄人士的Python学习记录(1)

学习记录(1)11.24 《零基础入门学习Python》(小甲鱼) P19 函数:灵活即强大 小笔记 1.形参和实参 def test(name): 这里的name就是形参 test(花蝴蝶) 花蝴蝶就是实参 2.函数文档 函数下面’括起来’ 可以用help()来查看 3.关键字参数 test(name=‘花蝴蝶’) 4.默认参数 位置参数必须在默认参数前面? 5.收集参数 print(*objects, sep=’ ‘, end=’\n’, file=sys.st

weixin_47638618的博客 139

Python学习流水账Day5——有关Python中的函数

不是用来教学的,上班没劲,主打一个本科毕业没竞赛没技术证一般路过路人,感觉停下学习的日子有焦虑症和死感,遂写点学习日记流水账来维持脑子一般性生命活动(?。五补:第五天了(一个爬去上班的星期一Python操作基础内容自己在编写程序时,有些在特定场景下需要多次使用的代码没有特定的内置函数去实现,这时候就可以自己定义一个函数来使用。定义一个命名函数print("早八人!早上好!")函数名最好是体现函数功能的词由字母、下划线、数字组成,且不能以数字开头不与关键词重名,且不出现除了下划线以外的特殊符号。

今天也在乱爬的博客 2290

零基础大龄人士的Python学习记录(2)

学习记录(2)11.26 《零基础入门学习Python》(小甲鱼) P21 内嵌函数和闭包 小笔记 1.global 关键字 global关键字可以做到修改局部变量为全局变量。 2.内嵌函数 在函数内部可以定义另一个函数,但是在函数外部不能调用到这个内嵌函数 这里顺道去看了一下递归函数。然后被汉诺塔搞得心态有点难受,研究了半天才看明白。 https://www.zhihu.com/question/37152936 3.闭包 嵌套函数中内部函数引用了外部函数的局部变量,内部函数就是一个闭包。(为了避免函数引

weixin_47638618的博客 101

流畅的python第九章学习记录

它会自动缓存函数的返回值,当相同参数再次调用时,直接返回缓存结果,避免重复计算,显著提升函数执行效率。是 Python 3.9 引入的一个装饰器,用于实现函数的。可以大幅优化算法性能,尤其在递归、动态规划等场景中效果显著。是对象的一种特性,表示该对象可以被用作字典(将函数内的局部变量声明为全局变量。在 Python 中,

Faul懒的博客 201

golang学习笔记3-变量的声明

变量的三种声明方式,多变量的声明,全局变量的声明

技术卷的博客 623

【python学习记录篇】10.Python变量和作用域

这样一来,当特定函数调用中的代码修改变量时,该函数与程序其他部分的交互只能通过它的参数和返回值。当一个函数被调用时,就会创建一个局部作用域,这个函数内赋值的所有变量,存在于该局部作用域内。只有一个全局作用域,它是在程序开始时创建的,如果程序终止,全局作用域就被销毁,它的所有变量就被丢弃了。定义在全局作用域的变量我们称为全局变量,定义在局部作用域的变量我们称为局部变量。一个函数的局部作用域中的代码,不能使用其他局部作用域中的变量。函数被调用,又创建了一个新的局部作用域,在这个作用域中,

patty0216的博客 765

闭包 python_Python基础入门(闭包)

通过解决一个需求问题来了解闭包。这个需求是这样的,我们需要一直记录自己的学习时间,以分钟为单位。就好比我学习了 2 分钟,就返回 2 ,然后隔了一阵子,我学习了 10 分钟,那么就返回 12 ,像这样把学习时间一直累加下去。面对这个需求,我们一般都会创建一个全局变量来记录时间,然后用一个方法来新增每次的学习时间,通常都会写成下面这个形式:time = 0def insert_time(min):t...

weixin_39574287的博客 108

局部变量和全局变量(Python)

Python 中只有模块(module),类(class)以及函数(def、lambda)才会引入新的作用域,其它的代码块(如 if/elif/else/、try/except、for/while等)是不会引入新的作用域的,也就是说这些语句内定义的变量,外部也可以访问。每个模块拥有它自已的名字空间,叫做全局名字空间,它记录了模块的变量,包括函数、类、其它导入的模块、模块级的变量和常量。各个命名空间是独立的,没有任何关系的,所以一个命名空间中不能有重名,但不同的命名空间是可以重名而没有任何影响。

m0_62110645的博客 6385

python基础教程:图解python全局变量与局部变量相关知识

这篇文章主要介绍了图解python全局变量与局部变量相关知识,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 了解全局变量和局部变量之前,我们先来了解一下作用域 a = 10 def func():   b = 20   def inner():     c = 30 以上面这个程序为例:打印a,b,c 可以看到只有a打印 10 ,b和c都报错...

python编程基础教程 3593

python 全局变量使用报错没有定义_python全局变量与局部变量

了解全局变量和局部变量之前,我们先来了解一下作用域a = 10deffunc():b= 20definner():c= 30以上面这个程序为例:打印a,b,c可以看到只有a打印 10 ,b和c都报错,这就是作用域的问题。我们把新创建的一个.py文件看做事一个模块,在模块内定义的变量,如a,就是这个模块的全局变量,作用于全局,不论在哪都可以调用,但是b和c 是定义在函数内部的,我们叫做局部变量,只能...

weixin_39835158的博客 2929
上一篇: 从事件调度理解阻塞和非阻塞
下一篇: STA-静态时序分析学习记录-1
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值