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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 日志服务(原SLS)新功能发布(14)–支持仅对指定键进行索引

    日志服务(原SLS)新功能发布(14)–支持仅对指定键进行索引

    2021年9月16日
    56
  • cs与bs架构_cs架构和bs架构的应用

    cs与bs架构_cs架构和bs架构的应用CS和BS架构介绍

    2025年10月14日
    2
  • eclipse中怎么自动补全_空格键坏了

    eclipse中怎么自动补全_空格键坏了eclipse自动补全及其空格键优化(去除空格自动补全)使用eclipse在创建其他工作区间的时候,想要配置代码自动补全,因为老是忘记,每次都要从网上查找,于是就自己总结一下。选1是代码自动补全,只需将“.”换为“.qwertyuiopasdfghjklzxcvbnm”就行了,看起来很乱,其实还是有规律可循的。(只需将键盘上的26字母按从左到右,从上到下的顺序按一遍就行了。)选2是空格不会自动补全,因为按空格会自动补全,所以有时候特别烦,而网上的大多数解决方法是需要改代码的,就会显得特别麻烦。于是

    2022年8月31日
    4
  • C语言怎么改变窗口的字体颜色和背景颜色?

    C语言怎么改变窗口的字体颜色和背景颜色?如果学C语言久了,难免会对弹出的黑窗口感到厌烦,那这时候如果能改一下黑窗口的背景颜色和字体颜色,也许会给自己一个好一点的心情。废话不多说,现在开始教你怎么简单地改变窗口的字体颜色和背景颜色。

    2022年6月20日
    146
  • PDAF原理简介_pfc电路工作原理图

    PDAF原理简介_pfc电路工作原理图PDAF原理原理及分类原理:是在感光芯片上预留出一些规律性对称的遮蔽像素点,专门用来进行相位检测,通过像素之间的距离及变化来决定对焦的偏移量即相位差(PD值)从而实现快速对焦。SP(shieledpixel)屏蔽掉像素一般的感光区域(黑色部分),值获得一半信号。需要另外的像素屏蔽掉另一半信号,得到完整的相位差信息。SP越多,对焦越快,但信号损失越严重,目前SP密度控制在1%~3%。屏蔽掉像素一般的感光区域(黑色部分),值获得一半信号。需要另外的像素屏蔽掉另一半信号,得到完整的相位差信息。S

    2025年9月29日
    2
  • textarea文本域宽度和高度(width、height)自己主动适应变化处理[通俗易懂]

    textarea文本域宽度和高度(width、height)自己主动适应变化处理[通俗易懂]文章来源:http://www.cnblogs.com/jice/archive/2011/08/07/2130069.htmltextarea宽度、高度自己主动适应处理方法150)?'15

    2022年8月1日
    10

发表回复

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

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