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)
上一篇 2025年8月6日 上午8:01
下一篇 2025年8月6日 上午8:22


相关推荐

  • 深入浅出python第二版PDF_python数据分析

    深入浅出python第二版PDF_python数据分析内容介绍热点排行相关文章下载地址↓中文名:深入浅出Python原名:深入浅出Python作者:巴里图书分类:网络资源格式:PDF版本:扫描版出版社:东南大学出版社书号:9787564126759发行时间:2011年5月地区:英国语言:英文简介:内容简介:你是否想过通过一本书来学习Python?《深入浅出Python))通过一种独特的超越语法手册的方式来帮助你学习Python。…

    2022年10月17日
    4
  • if语句与if else if else语句与if else语句与if if if语句

    if语句与if else if else语句与if else语句与if if if语句首先我们来看前三者的使用区别 1 if 型结构是 if 某个条件 语句 使用场景 当满足这个条件时 执行某个操作 而不满足该条件时 什么都不做 在这种情况下就可以使用这种结构 2 ifelse 型 if 某个条件 语句 1 else 语句 2 使用场景 当满足这个条件时 执行某个操作 当不满足这个条件时 执行另一个操作 和 if 型区别是如果不满足条件一个执行另一个操作 而一

    2026年3月19日
    2
  • Android二维码功能实现,在程序内嵌入ZXing项目

    Android二维码功能实现,在程序内嵌入ZXing项目最近二维码真是越来越火了 随便电视上 网络上 商场里 到处都是二维码 而内嵌二维码扫描功能的软件也越来越多 微信 UC 浏览器等等应用都可以对着二维码扫一扫 感觉我们自己的应用里不加上二维码扫描功能 都跟不上时代潮流了 所以今天我就将带着大家一起 在我们自己的程序里加入二维码扫描的功能 不过 二维码功能如果真要做起来还是非常复杂的 从零开始实现不太现实 比较好的做法就是借助现有的开源项目 目前在二维码这一领域名气最大的开源项目就是 ZXing 了 ZebraCrossin 它提供了多个平台的二维码扫

    2026年3月18日
    2
  • 变量,数据类型以及运算符概述

    变量,数据类型以及运算符概述

    2022年3月6日
    53
  • 简述django请求生命周期_django请求的生命周期

    简述django请求生命周期_django请求的生命周期Django请求生命周期分析1.客户端发送请求在浏览器输入url地址,例如www.baidu.com,浏览器会自动补全协议(http),变为http://www.baidu.com,现在部分网站都

    2022年7月30日
    9
  • Could not find resource com.occupation.mapper/StudentsMapper.xml_小晓_同学__新浪博客

    Could not find resource com.occupation.mapper/StudentsMapper.xml_小晓_同学__新浪博客错误的原因:路径不能写为com.occupation.mapper需要用斜杠

    2022年7月11日
    27

发表回复

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

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