python 函数内修改全局变量报错原因

函数内部修改外部全局变量,报错 UnboundLocalError: local variable 'a' referenced before assignment 的解决 一 今天做 leetcode 时,发现一个问题,比如下面这种情况: 1 def fun(): 2 a += 2 3 a = 1 4 fun() 5 print(a) 运行会报错: 二 但是联想到之前这种情况是可以运行的,不同的是全局变量为数组 9 def fun(): 10 a.append(2) 11 a = [1] 12 fun() 13 print... 阅读详情

请看问题代码

在这里插入图片描述

提出问题:

  • 本意就该是 先使用全局变量a,再加一 然后赋值给一个定义的局部变量a。 内部是如何运行的,导致解释器不是按照上面的想法去做的呢?

原因一:
(1)这样很容易歧义,对于同一个名字它要么是局部变量,要么是全局变量,不能是兼而有之
(2)解释器的规则是以赋值语句划分,如果一个变量在代码块中被赋值,它就是当前代码块的局部变量;否则看变量是否是外层函数的闭包变量,再看它是否只全局变量,最后看它是否是内建名字空间里的变量
(3) a += 1 是一个典型的赋值语句,因此 a 一定是局部变量。问题在于a还没有赋值完成初始化,就被读取来做加一计算,因此报错

我的理解是:
人的想法可能是,程序逐行执行,然后第一句碰到 a+1 时,找到了全局变量,然后再执行下一句赋值给 一个局部变量a。 是不是因为 解释器事先定义函数时已经确定了,其中名字空间的 变量,发现有a的局部变量被定义, 当下面再执行 这个函数的时候,output(),再进去执行这个函数的这个语句的时候,就会找到 本地的局部变量a ,然后a+1 ,此时不使用全局变量a,所以导致 提是,局部变量a在定义之前被使用

Python global全局变量函数详解 本文详解了global全局变量函数的用法,还有global的作用。global全局变量在一个脚本中全部作用域都可以访问,用法很方便,希望本文对大家有所帮助 global语句的作用 在编写程序的时候,如果想为一个在函数外的变量重新赋值,并且这个变量会作用于许多函数中时,就需要告诉python这个变量的作用域是全局变量。此时用global语句就可以变成这个任务,也就是说没有用global语句的情况下,... 阅读详情

相关推荐

Linux系统centos7安装网卡驱动

有时候我们装完Centos或Ubuntu系统会发现没有网卡信息,说明网卡驱动不配置,所以我们要重新安装。 首先去服务器主板官网下载网卡驱动,注意32位和64位。 先查看网卡型号 lspci | grep -i ethernet 我的网卡型号是 00:1f.6 Ethernet controller: Intel Corporation Device 0d55。 网上一找,压根没找到这型号的网卡,别说驱动了。怀着试一试的心态,就安装i219-v系的网卡驱动,还别说,成功了。 针对i21...

wshc18的博客 2万+

python函数内引用全局变量修改全局变量的值会报错。

try: n = input() print(n + ‘2’) except: print(‘1.代码报错时执行此处’) else: print(‘2.代码运行成功时执行此处’) finally: print(‘3.代码不管是否报错,都执行此处’)

weixin_40981660的博客 1266

利用易特天下 ipbox&零层壹号 sdwan 组网盒子实现异地组网

一款支持zerotier的异地组网盒子

v808v808的博客 3347

python 全局变量赋值不生效_Python:使用全局变量的语法无效

首先,我必须告诉你,我对编码是完全陌生的,所以我遇到的问题可能是有史以来最愚蠢的失误造成的,如果是,我很抱歉!我正在试着做一个计算器,它能计算+,-,*,/。它还应该给出一个错误消息,并要求一个新的操作符号,如果收到的是无效的。为了让计算机知道函数“main”是因为接收到无效的函数而运行,还是因为它是第一次运行,我尝试使用一个名为“check”的全局变量。开始时,check设置为1,因此计算机在请...

weixin_39823200的博客 2422

AST实战:解密Akamai混淆JS代码的完整流程

本文详细解析了如何使用AST技术解密Akamai混淆的JS代码,包括定位关键代码、AST解混淆实战步骤及常见问题解决方案。通过实际案例演示了从混淆代码到清晰逻辑的完整处理流程,并提供了工具推荐和法律合规建议,帮助开发者有效应对反爬虫技术。

weixin_33725722的博客 313

如何在两台电脑间,实现zotero文件和数据两种类型的双向同步

在完成本文配置后,可以在两台不同的电脑间,通过两步简单操作实现zotero数据和文件的双向同步,并且全程免费首先,打开zotero->编辑->首选项->高级->文件与文件夹,配置链接附件根目录以及数据存储位置,前者将pdf文件通过相对地址形式存于zotero中(而非真正的pdf文件),后者则是设置用户本地数据的地址建议设置在数据盘D盘,可以避免后续对盘名的修改(因为基本每个电脑都存在C盘和D盘)然后,同一页面下,打开同步,配置数据以及文件同步方式。数据同步保持默认即可,文件同步选择WebDav,然后去坚果云

weixin_43008154的博客 1万+

Python问题解决(四)函数中修改全局变量导致错误

目录Python问题解决(四)函数中修改全局变量导致错误问题解决 Python问题解决(四)函数中修改全局变量导致错误 其他python学习笔记集合: Python基础知识详解 从入门到精通 全集索引篇 问题 如 num = 3 def xiugai(); num = 4 print(num) print(num) 这里的本意是调用xiugai()时候将num修改,但是其实全局变量num并...

GuanFuXin优快云的博客 1533

手把手拆解UCIe协议层:从Raw Mode到Flit Mode,数据包到底经历了什么?

本文深入解析UCIe协议层的数据包处理机制,从Raw Mode到Flit Mode的三大变体(Standard 256B、68B-Enhanced、Latency-Optimized),详细揭示数据包在不同模式下的封装与转换过程。通过工程师视角,展示协议层如何实现多模式动态切换、错误恢复及与D2D Adapter的协同设计,为芯片级互连技术提供实践指导。

weixin_28728495的博客 238

python题

1.如何区别可变数据类型和不可变数据类型 可变类型传递的是内存中的地址,也就是说当进行修改操作时,会直接修改内存中的值,并没有开辟新的内存,可变类型的代表有list,dict 不可变类型被改变时,并没有改变原内存地址中的值,而是开辟一块新的内存,将原地址中的值复制过去,对这块新开辟的内存中的值进行操作,其代表有string,number,tuple 2.装饰器 如果没有装饰器,执行test(...

weixin_43316723的博客 292

OpenClaw 源代码深度分析报告 &如何把企业自有的MCP server 工具集成到OpenClaw里? 怎样通过OpenAI 风格SDK 解析出来OpenClaw的全部的流式输出内容?

项目属性详情名称OpenClaw版本2026.3.2许可证MIT语言最低运行时包管理器pnpm主要仓库},// 注册工具// 工具实现},});// 注册命令" }),});},方面评价模块化设计⭐⭐⭐⭐⭐ 插件架构清晰,扩展性强协议设计⭐⭐⭐⭐⭐ WebSocket 协议完善,支持多种客户端多渠道支持⭐⭐⭐⭐⭐ 20+ 消息通道,覆盖主流平台安全机制⭐⭐⭐⭐ 配对认证、设备签名、权限控制完善本地优先⭐⭐⭐⭐⭐ 数据本地存储,用户完全控制项目属性详情名称OpenClaw版本。

AI天才研究院 935

用 SAP HANA SDA 访问 PostgreSQL:从可行性到落地实践的完整指引

摘要:SAP HANA可通过SDA/SDI技术访问PostgreSQL数据库,支持数据虚拟化和实时复制。主要实现路径包括:1)使用Camel JDBC适配器创建虚拟表进行联邦查询;2)利用PostgreSQL Log Reader适配器实现变更数据捕获(CDC)。实施时需配置Data Provisioning Agent,注意权限和网络要求。官方文档指出,通过SDI+DP Agent的方式比直接SDA连接更稳定可靠。虚拟化查询时,HANA会自动将SQL下推到PostgreSQL执行,优化性能。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 253

local variable 'xxx' referenced before assignment

local variable 'xxx' referenced before assignment 定义了一个全局变量 createTableFlag,Python的一个函数里面引用这个变量,并改变它的值, 结果报错local variable 'xxx' referenced before assignment,如: local variable 'createTableFlag'...

YunWisdom 6861

华为OD机试真题 新系统2026-04-15 C++ 实现【失灵的键盘】

有一个键盘有2个按键失灵了,按下这些键时会连续输出其他键对应的字符两次。具体如下: 1. 按下j键一次,屏幕上显示uu(两个连续的u);  按下b键一次,屏幕上显示t(两个连续的t) 2. u键和t键是好的,按下u键一次时,屏幕只会显示一次u(正常按键);按下t键一次时,屏幕只会显示一次t(正常按键) 3. 假定屏幕上连续显示两个t一定是按了一次b键,而不是两次t键;假定按键t之后不会紧接着按键b,即tttt转义为两个b,而不可能是tb

MISAYAONE的博客 210

2025-10-07 Python不基础 20——全局变量与自由变量

Python函数对全局变量的操作存在反直觉特性:仅读取时正常,若尝试赋值则会报错。这是由于Python在编译时会根据是否出现赋值操作来判断变量作用域——有赋值即视为局部变量。解决方法包括:1)使用global关键字声明全局变量;2)在嵌套函数中使用nonlocal修改外层变量。值得注意的是,对可变对象的修改(如字典更新)不视为赋值操作。本文通过具体案例解析了这一机制,并对比了global和nonlocal的使用场景及注意事项,帮助开发者理解Python变量作用域的核心规则。

zheliku的博客 519

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

pthon的局部与全局变量

总结: 内部函数,不修改全局变量可以访问全局变量 内部函数,修改同名全局变量,则python会认为它是一个局部变量 在内部函数修改同名全局变量之前调用变量名称(如print sum),则引发Unbound-LocalError 在程序中设置的sum属于全局变量,而在函数中没有sum的定义,根据python访问局部变量和全局变量的规则:当搜索一个变量的时候,python先从局部作用域开始搜索,...

明天你好 172

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Python知识点:如何在函数中修改全局变量的值?

在函数之外定义的变量是全局变量。 全局变量可以在函数中读取,但是默认情况下不能在函数的修改变量的值。 可以读取 下面的代码可以在函数中成功打印粉丝数,因为函数可以读取全局变量的值: count = 30888 #全局变量,麦叔粉丝数 # 关注 def guanzhu(): print('麦叔的粉丝数是{}'.format(count)) # 取关 def quguan(): print('麦叔的粉丝数是{}'.format(count)) 不能修改 下面的代码会报错,因为函数默认不能修

Python_cocola的博客 2万+

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

【Python】函数中修改全局变量,是否需要使用global进行申明

前言 Python中,全局变量与局部变量的使用往往令新手头疼,特别是在多任务场景下,我们需要借助多线程、多进程、协程等方式进行代码的编写,其中全局变量的使用必不可少。 本节将说明Python函数中修改全局变量,何时需要使用global进行申明 示例1:对全局变量进行赋值操作 num = 0 # num的初始值为0 def test1(): print(num) # 证...

weixin_43868754的博客 9022

python函数中如何修改全局变量

这里的 global 关键字,并不表示重新创建了一个全局变量 DEFAULT_DB_NAME,而是告诉 Python 解释器,函数内部的变量 DEFAULT_DB_NAME,就是之前定义的全局变量,并不是新的全局变量,也不是局部变量。这样,程序就可以在函数内部访问全局变量,并修改它的值了。猛地一看,特别是之前搞过java或者go的同学,这不是在函数内部也能修改全部变量吗,根本就不需要加global啊!全局变量是定义在整个文件层次上的,可以在文件内的任何地方被访问,包括函数内部。这时候程序竟然报错了!

泗水长流的博客 961

Python global全局变量函数:轩详解

大家好,我是轩哥啊哈~ 本文详解了global全局变量函数的用法,还有global的作用。global全局变量在一个脚本中全部作用域都可以访问,用法很方便,希望本文对大家有所帮助 global语句的作用 在编写程序的时候,如果想为一个在函数外的变量重新赋值,并且这个变量会作用于许多函数中时,就需要告诉python这个变量的作用域是全局变量。此时用global语句就可以变成这个任务,也就是说没有用global语句的情况下,是不能修改全局变量的。 在python的函数使用时,经常会碰到

射手座轩木酱的代码天地~ 4740

Python 为什么全局变量在def XXX() 函数中使用突然报错????!!!!

Python 为什么全局变量在def XXX() 函数中使用突然报错???!!! 比如我的代码: 没有错误,仅使用,而不修改的时候: MaxPoint=sort(0,sX,sY,0) curPoint=sort(0,12,13,1) def test(): curPoint=sort(0,1,1,2) if curPoint.x>MaxPoint.x: ...

Elvirangel的博客 5233

【Python】全局变量详解二(修改全局变量值、定义位置和代码结构、命名建议)

全局变量是在函数外部定义的变量(没有定义在某一个函数内),所有函数内部都可以使用这个变量。 提示:全局变量是可变的,在其他开发语言中,大多是不推荐使用全局变量的,因为可变范围太大,会导致程序后期不好维护。 一、在函数内部修改全局变量的值 如果在函数中需要修改全局变量,需要使用global关键字进行声明。 global关键字会告诉解释器后面的变量是一个全局变量,再使用赋值语句时,就不会创建局部变量 代码体验: # 定义一个全局变量 num = 99 def demo1():

weixin_48728769的博客 1万+

python 函数嵌套 报错_Python 嵌套函数 与 global全局变量

1. 基本嵌套函数一个函数内部可以包含子函数,并在内部调用def main():def sub1():print('sub1')def sub2():print('sub2')print('main')sub1()sub2()main()结果mainsub1sub22. 内部函数参照外部变量def main():var = 1def sub1():print('sub1-var: ' + str(...

weixin_39966225的博客 282

python怎样设置全局变量_Python教程之全局变量用法

本文实例讲述了Python全局变量用法。分享给大家供大家参考,具体如下:全局变量不符合参数传递的精神,所以,平时我很少使用,除非定义常量。今天有同事问一个关于全局变量的问题,才发现其中原来还有门道。程序大致是这样的:CONSTANT = 0def modifyConstant() :print CONSTANTCONSTANT += 1returnif __name__ == '__main__'...

weixin_39854326的博客 4694

python函数中的全局变量访问修改问题

2、即便函数内部对全局变量进行赋值操作,那也会被python当做是一个新的与全局变量同名的局部变量。4、只有当在函数内部用global关键字显示的声明该变量是全局变量,才可以在函数内部对该全局变量进行正确的自增自减等修改操作。a=2 #在函数内部赋值全局变量,会新建一个同名局部变量,并不会真正修改全局变量的值。print(a) #在函数内部访问全局变量,会得到正确的值,将输出1。1、在函数内部可以访问全局变量,可以读取值,可以输出显示,但不允许修改。print(a) #输出2。

虫子牛虻——我和我的影子 2816

Python入门-函数如何调用全局变量

函数如何调用全局变量,这里主要介绍关键字global与nonlocal; 1,首先,我们介绍global关键字 先看下面的例子: a=10 def fun(): value=a+1 print("a=%d,vlaue=%d" % (a, value)) fun() 运行结果为: a=10,value=11 这里的a是定义在主流程中的,称为全局变量。 value是定义在函数中的,称为局部变量...

Jewitrick的博客 2856

python定义全局变量后报错_python使用全局变量的方法

python使用全局变量的方法发布时间:2020-09-03 11:02:38来源:亿速云阅读:88作者:小新小编给大家分享一下python使用全局变量的方法,希望大家阅读完这篇文章后大所收获,下面让我们一起去探讨吧!在编写程序的时候,如果想为一个在函数外的变量重新赋值,并且这个变量会作用于许多函数中时,就需要告诉python这个变量的作用域是全局变量。此时用global语句就可以变成这个任务,也...

weixin_35323550的博客 2108
上一篇: 小整数静态对象池相关问题
下一篇: docker 更改国内下载源
我是py呀
博客等级 码龄8年 205粉丝 130原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值