python全局变量在整个程序内都有效_Python 全局变量使用

python全局变量在整个程序内都有效_Python 全局变量使用在平时的开发中我们有时候会用到全局变量 但是很多开发语言不允许使用或者建议少使用全局变量 Python 也是如此 但是有时候为了编写程序的方便和灵活 必须使用全局变量 这篇文章记录是我在使用 Python 全局变量的一些体会 写的不是很好 欢迎大家指正 一 使用全局变量首先展示一段不能修改全局变量的代码 gl string helloPython 定义全局变量 gl stringprint i

在平时的开发中我们有时候会用到全局变量,但是很多开发语言不允许使用或者建议少使用全局变量,Python也是如此。但是有时候为了编写程序的方便和灵活,必须使用全局变量。这篇文章记录是我在使用Python全局变量的一些体会,写的不是很好,欢迎大家指正!

一,使用全局变量

首先展示一段不能修改全局变量的代码:

gl_string =”hello Python” # 定义全局变量gl_string

print(id(gl_string))# 打印全局变量gl_string的内存地址

print(gl_string)

print(“开始全局打印———“)

# 函数1

def demo1():

gl_string =”hello Objc”

print(id(gl_string))

print(gl_string)

print(“demo1打印———“)

# 函数2

def demo2():

gl_string =”hello Java”

print(id(gl_string))

print(gl_string)

print(“demo2打印———“)

demo1() # 调用

demo2() # 调用

# 最后打印全局变量的信息

print(id(gl_string))

print(gl_string)

print(“最后全局打印———“)

打印结果如下:

hello Python

开始全局打印———

hello Objc

demo1打印———

hello Java

demo2打印———

hello Python

最后全局打印———

从打印的结果发现,每次在函数里面给gl_string变量进行赋值操作时,gl_string变量的内存地址都不一样,而且gl_string对应的值也不一样。从开始到结束的打印结果来看,全局变量gl_string内存地址和对应的值都没有发生改变。依此可以得出这样的结果:当在函数里面不添加其他操作的情况下是无法修改全局变量的,函数里面的对全局变量的赋值操作实际上是系统帮我们创建了一个跟全局变量同名的局部变量

二,如何修改全局变量

还是先看一段代码:

# 定义全局变量num

gl_string = “hello Python”

# 打印全局变量num的内存地址

print(id(gl_string))

print(gl_string)

print(“开始全局打印———“)

def demo1():

global gl_string

gl_string = “hello Objc”

print(id(gl_string))

print(gl_string)

print(“demo1打印———“)

def demo2():

gl_string = “hello Java”

print(id(gl_string))

print(gl_string)

print(“demo2打印———“)

demo1()

demo2()

print(id(gl_string))

print(gl_string)

print(“最后全局打印———“)

上面这段代码跟之前的那端段代码有一点区别,现在的这份代码在demo1里面添加了这句代码global gl_string,下面看看输出结果:

hello Python

开始全局打印———

hello Objc

demo1打印———

hello Java

demo2打印———

hello Objc

最后全局打印———

从输出结果可以看到,demo1里面的打印结果和程序结束时打印结果是一致的,而程序开始的结果和demo2里面的结果不一样。

我们现在demo2里面加一行代码再看看输出结果:

# 定义全局变量num

gl_string = “hello Python”

# 打印全局变量num的内存地址

print(id(gl_string))

print(gl_string)

print(“开始全局打印———“)

def demo1():

global gl_string

gl_string = “hello Objc”

print(id(gl_string))

print(gl_string)

print(“demo1打印———“)

def demo2():

global gl_string

gl_string = “hello Java”

print(id(gl_string))

print(gl_string)

print(“demo2打印———“)

demo1()

demo2()

print(id(gl_string))

print(gl_string)

print(“最后全局打印———“)

输出结果:

hello Python

开始全局打印———

hello Objc

demo1打印———

hello Java

demo2打印———

hello Java

最后全局打印———

从这次的输出结果可以看出,demo2和程序结束时打印的结果是一样的,而开始的打印结果和demo1里面的打印结果不一样。

从以上三段代码的打印结果最后的出如下的结论,在函数内部使用全局变量时,如果不添加global关键字修饰全局变量,那么我们在函数里面对全局变量的赋值操作实际上并不是对全局变量的赋值,而是创建了一个跟全局变量同名的局部变量。如果用global关键字修饰以后的全局变量,在函数内进行赋值操作时确实修改了全局函数的值,但这个也只是一个假象而已,因为在每次赋值时,全局变量的内存地址都在改变,系统只是将变量标识符指向了最新的内存地址而已,并不是在原来的内存地址是修改。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/233225.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • SSM-Spring(2)_AOP[通俗易懂]

    SSM-Spring(2)_AOP[通俗易懂]AOP用Spring需要导入包<dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>1.9.4</version> </dependency>方式一:使用Spring接口编写javapackage com.kuang.log;

    2022年8月8日
    5
  • LeetCode18:4Sum

    LeetCode18:4Sum

    2022年1月17日
    39
  • 一致性哈希算法的问题

    一致性哈希算法的问题本文将从如下三个方面探探一致性哈希算法一致性哈希算法经典实用场景 一致性哈希算法通常不适合用于服务类负载均衡 面试应对之策1、一致性哈希算法经典使用场景在数据库存储领域如果单表数据量很大,通常会采用分库分表,同样在缓存领域同样需要分库,下面以一个非常常见的Redis分库架构为例进行阐述。将上述3个Redis节点称之为分片,每一个节点存储部分数据,期间需要使用负载均衡算法,将数据尽量分摊到各个节点,充分发挥分布式的优势,提升系统缓存访问的性能。在分布缓存领域,对数据存在新增与..

    2022年7月27日
    9
  • Pycharm 更改国内镜像[通俗易懂]

    Pycharm 更改国内镜像[通俗易懂]打开File-setting-Project:项目名称-projectInterpreter-点击右边加号出现availablepackages-下边Managerespositories-将默认的更换成清华大学镜像https://pypi.tuna.tsinghua.edu.cn/simple/然后关闭即可

    2022年8月29日
    2
  • 项目部署、配置、查错常用到的Linux命令

    项目部署、配置、查错常用到的Linux命令

    2020年11月12日
    259
  • 理解LSTM模型[通俗易懂]

    理解LSTM模型[通俗易懂]写在前面:这是翻译自colah的一篇博客,原文关于LSTM神经网络模型的理解写的非常直观、简单易懂,所以翻译过来帮助大家学习理解LSTM模型。当然我不是按照原文一字不落的翻译,而是摘出其中对模型理解最有帮助的部分,然后用我自己理解的方式和语言来写的博文。这是我翻译博文的一贯做法。有兴趣的可以自行去看原文,比较简短,原博客地址:http://colah.github.io/posts/2015-08-Understanding-LSTMs/一、循环神经网络RNNRNN循环神经网络使用循环核来实

    2025年10月19日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号