python 局部变量 占内存吗_Python中全局变量和局部变量的理解与区别

前言

学过编程的人应该对全局变量与局部变量这两个名词并不陌生,Python也同多数编程语言一样,也有全局变量与局部变量的概念

但是与其他编程语言又有所不同

全局变量与局部变量两者的本质区别就是在于作用域

用通俗的话来理解的话,

全局变量是在整个py文件中声明,全局范围内都可以访问

局部变量是在某个函数中声明的,只能在该函数中调用它,如果试图在超出范围的地方调用,程序就爆掉了

如果在函数内部定义与某个全局变量一样名称的局部变量,就可能会导致意外的效果,可能不是你期望的。因此不建议这样使用,这样会使得程序很不健全

直接来看几个例子来理解全局变量和局部变量的区别吧:

Demo1:

def fun(x):

y=2

print("乘法的运行结果:",x*y)

num1=1

print("初始num1=",num1)

fun(num1)

print("y的值是:",y)

运行结果:

cd1123cc7de8879d9ff5a19d7d3e093d.png

报错的原因是因为试图访问局部变量,但是访问的地方不在该变量y的作用域中

Demo2:

def fun():

num1=2

print("函数内修改后num1=",num1)

num1=1

print("初始num1=",num1)

fun()

print("运行完函数后num1=",num1)

运行结果:

62a09eb7ecd2c3052198f425e34a41a1.png

可以看到在函数内部对全局变量的修改后,在函数执行完毕,修改的结果是无效的,全局变量并不会受到影响

再看:

Demo3:

def fun():

num1*=2

print("函数内修改后num1=",num1)

num1=1

print("初始num1=",num1)

fun()

print("运行完函数后num1=",num1)

运行结果:

4341b3a919e771f16ce04387b8d096b7.png

报错了。这是因为在fun()函数使用了局部变量num1,它只是个跟全局变量同名的局部变量,使用前还是要赋值,因此再次强调不要这样使用

global关键字

如果真的想要在函数体内修改全局变量的值,就要使用global关键字

Demo4:

def fun():

global num1

num1=2

print("函数内修改后num1=",num1)

num1=1

print("初始num1=",num1)

fun()

print("运行完函数后num1=",num1)

运行结果:

31b577d44de7d0950133892437b1fdb8.png

使用global关键字就是告诉python编译器这个变量不是局部变量而是全局变量,其实有点像是"引用"的意思

nonlocal关键字

再看看另一个跟变量相关的关键字nonlocal,字面意思就是指当前的这个变量不是局部变量。nonlocal是Python3.0中新增的关键字,python2.x不支持

先来看看下面这段代码

def fun():

num2=3

def fun2():

num2*=2

print("num2=",num2)

return fun2()

fun()

运行结果:

cc42690a1823061fe1d14b23ddf6cd39.png

错误的原因跟前面的差不多,就是使用了未定义的局部变量,然而num2也不是全局变量,只是fun2函数的外层变量,强行使用global定义num2的话同样会报错(不信你试试)

这时候需要使用nonlocal关键字:

def fun():

num2=3

def fun2():

nonlocal num2

num2*=2

print("num2=",num2)

return fun2()

fun()

运行结果:

ea15d9a4f782d4bbd7ff82048e1b2c6b.png

如此,程序就能正常执行

总结

到此这篇关于Python中全局变量和局部变量的文章就介绍到这了,更多相关Python全局变量和局部变量内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/302886.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

port wifi to ICS(4.0.3)

去年移植了2.2。最近又刚刚移植了4.0.3。使用的是broadcom的bcm4329网卡。现把移植经历分享一下 1.该android.hardware.wifi.xml复制到out目录下 在相应的.mk文件中。添加 PRODUCT_COPY_FILES \ frameworks/base/data/etc/android.hardware.wifi.xml:$(PRODUCT_OUT)system/etc…

C# 离线使用nuget

正常在我们使用nuget进行程序集下载的时候,直接在vs编辑器中直接进行操作,下载自己想要的各种程序,但是某些时候,在进行一些办公时,公司要求本机编码不能进行联网操作,那么这种情况下我们怎么进行nuget程序…

21个令程序员泪流满面的瞬间

「1」公司实习生找 Bug「2」在调试时,将断点设置在错误的位置「3」当我有一个很棒的调试想法时 「4」偶然间看到自己多年前写的代码「5」当我第一次启动我的单元测试时「6」数据库的Delete语句忘了使用限定词where... 「7」明明是个小bug但就是死活修不好......「8…

python气象数据处理与绘图_Python气象数据处理与绘图:纬高图的另一种思路

前言有些时候为了研究不同高度上气象要素之间的联系,纬度-高度作为xy轴的图在一些SCI论文中比较常见。这是我研究的CMIP6数据中ua,va,wap,ta这几个气象要素在纬度-高度图上的不同。读取数据的地方就略去了,需要注意的是需要进行平均,温度转为…

新的一年

1、学习一种新语言,框架或方法 2、让你掌握的内容更精深 3、探索一个新的领域 4、参与社区 5、教导他人 6、更好地照顾自己 7、更好的管理自己的时间(以及其他资源)

.Net Core 集成 Kafka

最近维护的一个系统并发有点高,所以想引入一个消息队列来进行削峰。考察了一些产品,最终决定使用kafka来当做消息队列。以下是关于kafka的一些知识的整理笔记。kafkakafka 是分布式流式平台。它由linkedin开发,后贡献给了Apache开源组织并成为…

如果生活中没有数学,那么。。。

随着科技的快速发展,人工智能的重要性日渐显现。对于大多数新手来说,弄清楚入门人工智能需要哪些数学基础、需要熟悉什么框架等,都至关重要。机器学习是一个异常丰富的研究领域,有大量未解决的问题:公正、可解释性、易…

mysql5.6查看归档_MySQL5.6 使用 pt-archiver 分批删除、归档数据

pt-archiver是一个十分高效的表数据归档工具,归档数据可以分批进行事务处理,减少性能消耗;如果实例开启了GTID,因为GTID不支持CTAS创建表的语法,可以使用pt-archiver处理;对于跨实例或者跨服务器的表数据归…

Python学习笔记整理(三)Python中的动态类型简介

Python中只有一个赋值模型 一、缺少类型声明语句的情况 在Python中,类型是在运行过程中自动决定的,而不是通过代码声明。这意味着没有必要事声明变量。只要记住,这个概念实质上对变量,对象和它们之间的关系都适用。那么这个概念也…

Microsoft宣布将停止支持多个 .NET Framework版本

Microsoft 宣布,使用传统的、不安全的安全哈希算法1(SHA-1)签名的多个 .NET 框架版本将在明年停止支持。据 .NET 首席工程经理 Jamshed Damkewala 表示,.NET 框架 4.5.2、4.6 和 4.6.1 将在 2022 年 4 月 26 日后停止支持&#xf…

算法有偏见?总比人类识别强吧!

在讨伐算法导致的偏见和产生的作用时,更重要的问题是:与完全没有使用算法的情况相比是怎样的?我们应该比较算法的缺陷与人类的缺陷,而不是简单地询问算法是否存在缺陷。一场革命正在悄然进行。这场革命与大部分新闻报道中出现的人…

no ip domain-lookup 什么意思

no ip domain-lookup 是什么意思? 当你敲入一个不能识别的命令时,它不会去向查找域名一样,去搜DNS服务器。如果在你的网络中没有DNS服务器的话,那么在配置router的时候最好写上该句,因为我们都不是专业的打字员&#x…

如何将mysql文件导入MySQL_如何将mysql5的sql文件导入到mysql4?

1、将mysql5里导出的sql文件导入到mysql5中。 2、用mysqldump -uroot -p1234 --opt --compatiblemysql40 -A -re:/localhost.sql --compatiblename参数描述如下: --compatiblename Change the dump to be compatible with a given mode. By default tables are dump…

通过Dapr实现一个简单的基于.net的微服务电商系统(八)——一步一步教你如何撸Dapr之链路追踪

Dapr提供了一些开箱即用的分布式链路追踪解决方案,今天我们来讲一讲如何通过dapr的configuration来实现非侵入式链路追踪的目录:一、通过Dapr实现一个简单的基于.net的微服务电商系统二、通过Dapr实现一个简单的基于.net的微服务电商系统(二)——通讯框架…

21副酷炫的动图让你了解各种数学概念

数学是很难的科学,但因为它是科学家用数学来解释宇宙的语言,我们无可避免的要学习它。看看下面的这些GIF动图,它们提供了视觉的方式来帮助你理解各种数学技巧。1椭圆的画法2杨辉三角问题(Pascal triangles)解法3使用“FOIL”轻松的解决二项式…

VMware 虚拟机(linux)增加根目录磁盘空间

今天查看学校的监控报修系统,不能访问了!!!系统运行很慢,用top命令查看发现内存使用率90%,用"df -h ”查看“/”目录使用率已达到80%,导致系统运行很慢。我用以下方法扩大根目录磁盘空间。…

阅读Java_如何阅读 Java 开源代码?

最近正在学习阅读源码,看到的大神许鹏的方法,感觉很有用,分享给大家源码阅读其实是一个逆向的工程,这期间必须会遇到种种问题。一般来说,我会遵循这样一个思维范式——Problem domain→model→architecture&implem…

网关Ocelot功能演示完结,久等了~~~

前言关于网关(Ocelot)的分享,还遗留一些功能没演示呢,接着来聊聊;这次重点针对网关Ocelot使用缓存、集成Polly做服务治理、集成IdentityServer4做认证授权来详细说说;如果对上一篇感兴趣,点这里(网关Ocelot功能演示安排…

数学课本上的几大变态

数学课本上的几大变态数据与算法之美用数据解决不可能长按扫码关注

读“苹果上周发布了Mac OS X Mountain Lion系统”新闻的感想

苹果上周发布了Mac OS X Mountain Lion系统,该系统将使得你的桌面电脑更像是一款手机。这种趋势非常明显,桌面操作系统未来将和移动系统进一步融合。 我们先从趋势本身说起。首先,相比此前的系统版本,苹果此次在Mountain Lion中更…