为什么python在函数中修改"字典型全局变量"不需要global

Python 关键字global全局变量详解 字符串、数字类型是不能被在局部被修改的,除非使用global关键字,但是 列表,字典是可修改,但不能重新赋值,如果需要重新赋值,需要在函数内部使用global定义全局变量。全局变量所有作用域都可用,局部变量只能在本函数可用,变量的使用顺序是,局部变量 > 全局变量, 也就是说:优先使用局部变量。为了解决函数内使用全局变量的问题,python增加了global关键字, 利用它的特性, 可以指定变量的作用域。那么问题来了, 如果想在函数内使用全局变量,或改变全局变量的值, 应该怎么做呢?函数优先使用局部变量。 阅读详情

转自http://blog.youkuaiyun.com/handsomekang/article/details/41392417?utm_source=tuicool:

比如下面这段代码

[python]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. s = 'foo'  
  2. d = {'a':1}  
  3. def f():  
  4.     s = 'bar'  
  5.     d['b'] = 2  
  6. f()  
  7. print s  
  8. print d  

为什么修改字典d的值不用global关键字先声明呢?

这是因为,

  • 在s = 'bar'这句中,它是“有歧义的“,因为它既可以是表示引用全局变量s,也可以是创建一个新的局部变量,所以在python中,默认它的行为是创建局部变量,除非显式声明global.
  • 在d['b']=2这句中,它是“明确的”,因为如果把d当作是局部变量的话,它会报KeyError,所以它只能是引用全局的d,故不需要多此一举显式声明global。

上面这两句赋值语句其实是不同的行为,一个是rebinding, 一个是mutation.


但是如果是下面这样

[python]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. d = {'a':1}  
  2. def f():  
  3.     d = {}  
  4.     d['b'] = 2  
  5. f()  
  6. print d  

在d = {}这句,它是”有歧义的“了,所以它是创建了局部变量d,而不是引用全局变量d,所以d['b']=2也是操作的局部变量。


推而远之,这一切现象的本质就是”它是否是明确的“。

仔细想想,就会发现不止dict不需要global,所有”明确的“东西都不需要global。因为int类型str类型之类的,只有一种修改方法,即x = y, 恰好这种修改方法同时也是创建变量的方法,所以产生了歧义,不知道是要修改还是创建。而dict/list/对象等,可以通过dict['x']=y或list.append()之类的来修改,跟创建变量不冲突,不产生歧义,所以都不用显式global。


【python教程入门学习】Python 关键字global全局变量详解 变量作用域 一般在函数体外定义的变量成为全局变量,在函数内部定义的变量称为局部变量。 全局变量所有作用域都可用,局部变量只能在本函数可用,变量的使用顺序是,局部变量 > 全局变量, 也就是说:优先使用局部变量 那么问题来了, 如果想在函数内使用全局变量,或改变全局变量的值, 应该怎么做呢? global关键字 为了解决函数内使用全局变量的问题,python增加了global关键字, 利用它的特性, 可以指定变量的作用域。 global关键字的作用:声明变量var是全局的 代码实例 实例1: 函数优先使 阅读详情

相关推荐

Python全局变量global关键字详解

这篇文章主要介绍了Python全局变量global关键字详解,需要的朋友可以参考下 Python中的变量作用域 一般在函数体外定义的变量成为全局变量,在函数内部定义的变量称为局部变量。 全局变量所有作用域都可用,局部变量只能在本函数可用,变量的使用顺序是,局部变量 > 全局变量, 也就是说:优先使用局部变量 那么问题来了, 如果想在函数内使用全局变量,或改变全局变量的值, 应该怎么做呢? Python全局变量global关键字 为了解决函数内使用全局变量的问题,python增加了global关键字.

program_G的博客 1591

飘逸的python - 为什么修改全局的dict变量不用global关键字

比如下面这段代码 s = 'foo' d = {'a':1} def f(): s = 'bar' d['b'] = 2 f() print s print d 为什么修改字典d的值不用global关键字先声明呢? 这是因为, 在s = 'bar'这句中,它是“有歧义的“,因为它既可以是表示引用全局变量s,也可以是创建一个新的局部变量,所以在python中

mattkang 9035

PowerBuilder 9 遗留系统逆向实战:3款反编译工具对比与关键DLL破解

本文深入探讨了PowerBuilder 9遗留系统的逆向工程实战,对比分析了PBKiller、PB DeCompiler和Shudepb三款反编译工具的核心功能与适用场景,并详细解析了关键DLL破解技术。通过IDA和OllyDbg等工具的应用,提供了从静态解构到动态追踪的完整逆向方法论,帮助开发者有效维护老旧PB系统。

cucanqi9387的博客 1384

python-全局变量是否使用global总结

在一个函数中, 对全局变量进行修改的时候,到底是否需要使用global进行说明 要看是否对 全局变量的指向进行了修改, 如果修改了执行,即让全局变量指向一个新的地方,那么必须使用gobal ;如果仅仅修改了 指向的空间数据, 此时就不需要使用global 即,对可变对象,无须使用global;对不可变对象,需要使用global num = 100 nums = [11, 22] def...

XTY00的博客 1006

OpenCV实战:高效检测与识别多类型条码与二维码

本文详细介绍了如何利用OpenCV的BarcodeDetector和QRCodeDetector模块,高效实现EAN-13条形码与常见二维码的检测与识别。内容涵盖从环境搭建、单码识别到处理多二维码的完整流程,并分享了提升识别率的图像预处理与性能优化等实战技巧,帮助开发者一站式解决视觉项目中的条码识别需求。

weixin_29094539的博客 493

学习笔记之——Event Camera(事件相机)调研

概述 Event Camera是一种bio-inspired sensor,对应的领域为bio-inspired vision。对于传统的相机,从某种程度上,是捕获一个静态/静止的空间,而Event Camera的目的是:敏感地捕捉运动的物体。 对于传统RGB-camera,相机传回的信息是同步的,所谓同步,就是在某一时刻t,相机会进行曝光,把这一时刻所有的像素填在一个矩阵里回传,一张照片就诞生了。一张照片上所有的像素都对应着同一时刻。至于视频,不过是很多帧的图片,相邻图片间的时间间隔...

gwpscut的博客 3万+

Python基于global思想实现多文件共享全局参数【详细且好用】

python中的global关键字是可以定义一个全局变量的,但这个全局变量只能应用于一个py文件中,当在另一个py文件便无法通过global y 访问到变量。 global 的基础用法: x = 6 def func(): global x #定义外部的x x = 1 func() print (x) #输出1 但这种用法,不能在其他的py文件中使用,但我们可以根据这个global思想定义一个文件,里面专门是定义全局变量以及调用全局变量。只需要在想要操作的文件的main中初始化一次全

记录学习的小白 5933

Ubuntu24.04LTS上Ollama GPU加速配置指南:从驱动安装到多卡均衡负载

本文详细介绍了在Ubuntu24.04LTS系统上配置Ollama GPU加速的完整指南,包括NVIDIA驱动安装、CUDA Toolkit配置、Ollama在线与离线安装方法,以及多GPU负载均衡优化策略。通过实战案例和性能调优建议,帮助开发者充分利用硬件资源提升大型语言模型的运行效率。

weixin_29255731的博客 760

python定义一个全局字典,跨不同文件脚本的Python全局字典

Hello. I am trying to use a global dict created in main.py, which is called in functions.py.In my main.py I have:import sys,os,...import functions.py #import my second filematrix = {}matrix_do_somethi...

weixin_34151001的博客 585

AI人工智能与数据挖掘的技术融合趋势

我们的目的是搞清楚AI人工智能和数据挖掘是怎么融合在一起的,以及这种融合未来会有什么样的发展趋势。范围涵盖了这两种技术融合的原理、应用场景,还有未来可能面临的挑战。我们会先讲讲AI人工智能和数据挖掘是什么,它们之间有什么关系。然后说说它们融合的算法原理、数学模型。接着通过一个实际的项目案例,看看它们是怎么在实际中运用的。还会介绍一些它们的应用场景和相关工具。最后分析一下未来的发展趋势和挑战,并且总结学到的知识,提出一些思考题让大家思考。AI人工智能。

AI 领航者的博客 1367

【系统分析师】高分论文:论基于构件的软件开发(气象灾害影响评估系统)

本文以某手机气象灾害影响评估系统为例,探讨了基于构件技术的软件开发实践。通过分析开发中常见的功能模块重复问题,提出建立企业构件库、针对性选择构件和加强构件管理的解决方案。项目实施中成功复用登录模块等通用构件,并针对气象数据转换需求开发新构件,最终在8个月内高质量完成系统建设。文章总结了构件开发的三个关键点:构件库建设是基础、构件选择需精准、构件管理要规范。同时指出需注意全新需求开发、性能优化等问题,建议通过培训提升团队对构件的理解力。该案例证明构件技术能有效缩短周期、降低成本,为企业积累可复用的技术资产。

数据知道的博客 4253

python定义一个全局字典_跨不同文件脚本的Python全局字典

Hello. I am trying to use a global dict created in main.py, which is called in functions.py.In my main.py I have:import sys,os,...import functions.py #import my second filematrix = {}matrix_do_somethi...

weixin_39922769的博客 437

大厂硬件笔试机试题ASIC设计方向-卷3

本文提供了30道硬件工程师机试题目,涵盖数字逻辑、模拟电路、CMOS和信号处理等核心领域。选择题和判断题均配有详细解析,重点考察Verilog编程、CMOS特性、触发器设计、采样定理等知识点。题目难度适中但覆盖面广,如Verilog中阻塞/非阻塞赋值的区别、CMOS静态功耗来源、Nyquist采样定理、通用逻辑门判断等。备考建议强调掌握逻辑门设计、Verilog时序电路编写和CMOS特性理解。这些题目反映了华为等大厂硬件机试的典型考查内容,通过系统复习可有效提升机试成绩,为后续面试奠定基础。

启芯硬件的博客 545

引用全局变量,不需要golbal声明,修改全局变量,需要使用global声明,特别地,列表、字典等如果只是修改其中元素的值,可以直接使用全局变量,不需要global声明。

python 全局变量引用与修改 一、引用 使用到的全局变量只是作为引用,不在函数中修改它的值的话,不需要加global关键字。如: #! /usr/bin/python a = 1 b = [2, 3] def func(): if a == 1: print("a: %d" %a) for i in range(4): if i ...

momo_mo520的博客 3226

Python爬虫实战:Boss直聘职位数据采集实战 - Playwright + 结构化解析完整方案(附CSV导出 + SQLite持久化存储)!

我长期专注 Python 爬虫工程化实战,主理专栏 《Python爬虫实战》:从采集策略到反爬对抗,从数据清洗到分布式调度,持续输出可复用的方法论与可落地案例。内容主打一个“能跑、能用、能扩展”,让数据价值真正做到——抓得到、洗得净、用得上。

喵手的博客 2188

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

python3函数内怎么修改全局变量?

在上面的代码中,我们将全局变量x定义为一个不可变的整数对象,并在函数内部试图修改它的值。但是最后输出x的值时,得到的仍然是全局变量x的值10,而不是修改后的值11。在上面的代码中,我们没有使用global关键字声明全局变量x,而是在函数内部定义了一个和全局变量同名的局部变量x,并修改了它的值。但是最后输出x的值时,得到的仍然是全局变量x的值10,而不是修改后的值20。需要注意的是,使用字典或类来存储全局变量的方法,虽然可以实现对全局变量的修改,但是比起使用global关键字或可变对象,会稍微复杂一些。

xiangxueerfei的博客 3135

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

python全局变量global_实例讲解Python中global语句下全局变量的值的修改

Python的全局变量:int string, list, dic(map) 如果存在global就能够修改它的值。而不管这个global是否是存在于if中,也不管这个if是否能够执行到。但是,如果没有if bGlobal:global g_strVal;int string 将会报错。而list dic(map)是ok的。#!/usr/bin/dev pythonimport sysimport...

weixin_39964590的博客 402

ssm框架搭建

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

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

python 函数 全局变量_python3函数内全局变量使用global

原博文2017-08-16 23:08 −``` def p_num(): global num num = 10 print (num) num = 5 p_num() print(num) ```...相关推荐2019-12-11 15:55 −如果需要在函数内部改变函数外部的变量,就可以通过在函数内部声明变量为global变量。这样当程序运行至global变量便会替换外部的同名...

weixin_39788131的博客 1176

python中global什么意思_python中的global关键字的使用方法

摘要global标志实际上是为了提示 python 解释器,表明被其修饰的变量是全局变量。这样解释器就可以从当前空间 (current scope) 中读写相应变量了。Python 的全局变量是模块 (module) 级别的每个 python 函数拥有对应的__globals__字典,该字典与函数所属模块的__dict__字典完全相同。函数的全局变量也会从这个字典中获取注:上面三句话的意...

weixin_34467247的博客 1万+

字典,集合,函数,global全局变量声明

1.if实现switch #!/usr/bin/env python #coding=utf-8 while 1: num1 = input("num1:") oper = raw_input("操作符:") num2 = input("num2:") if oper == "+": print num1 + num2 elif op...

xixlxl的博客 2161

python如何在函数内部修改全局变量

在这个例子中,我们定义了一个列表lst,并定义了一个函数func。在这个例子中,我们声明了一个全局变量x,并定义了一个函数func。在函数内部,我们使用global关键字声明了变量x,并将其赋值为20。在这个例子中,我们定义了一个类Global,它保存了全局变量x。在函数内部,我们使用这个类来修改变量x,并打印出它的值。在Python中,全局变量是在模块级别定义的变量,可以在整个程序中使用。在Python中,可变数据类型(如列表和字典)可以在函数内部修改,并且这些修改会影响到全局变量。

m0_46478042的博客 2300

python声明全局变量的关键字是什么_Python 关键字global全局变量详解

变量作用域一般在函数体外定义的变量成为全局变量,在函数内部定义的变量称为局部变量。全局变量所有作用域都可用,局部变量只能在本函数可用,变量的使用顺序是,局部变量 > 全局变量, 也就是说:优先使用局部变量那么问题来了, 如果想在函数内使用全局变量,或改变全局变量的值, 应该怎么做呢?global关键字为了解决函数内使用全局变量的问题,python增加了global关键字, 利用它的特性, 可...

weixin_39972996的博客 4400

python global用法_Python 关键字global全局变量详解

变量作用域一般在函数体外定义的变量成为全局变量,在函数内部定义的变量称为局部变量。全局变量所有作用域都可用,局部变量只能在本函数可用,变量的使用顺序是,局部变量 > 全局变量, 也就是说:优先使用局部变量那么问题来了, 如果想在函数内使用全局变量,或改变全局变量的值, 应该怎么做呢?global关键字为了解决函数内使用全局变量的问题,python增加了global关键字, 利用它的特性, 可...

weixin_39625563的博客 2357
上一篇: 矩阵模板
下一篇: AC自动机模版
Baoli1008
博客等级 码龄12年 70粉丝 293原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值