python全局变量在整个程序内都有效_Python 全局变量使用
在平时的开发中我们有时候会用到全局变量,但是很多开发语言不允许使用或者建议少使用全局变量,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("最后全局打印---------")
打印结果如下:
4482589808
hello Python
开始全局打印---------
4482589552
hello Objc
demo1打印---------
4482512880
hello Java
demo2打印---------
4482589808
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,下面看看输出结果:
4412728496
hello Python
开始全局打印---------
4412728240
hello Objc
demo1打印---------
4412906864
hello Java
demo2打印---------
4412728240
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("最后全局打印---------")
输出结果:
4393530544
hello Python
开始全局打印---------
4393530288
hello Objc
demo1打印---------
4393709040
hello Java
demo2打印---------
4393709040
hello Java
最后全局打印---------
从这次的输出结果可以看出,demo2和程序结束时打印的结果是一样的,而开始的打印结果和demo1里面的打印结果不一样。
从以上三段代码的打印结果最后的出如下的结论,在函数内部使用全局变量时,如果不添加global关键字修饰全局变量,那么我们在函数里面对全局变量的赋值操作实际上并不是对全局变量的赋值,而是创建了一个跟全局变量同名的局部变量。如果用global关键字修饰以后的全局变量,在函数内进行赋值操作时确实修改了全局函数的值,但这个也只是一个假象而已,因为在每次赋值时,全局变量的内存地址都在改变,系统只是将变量标识符指向了最新的内存地址而已,并不是在原来的内存地址是修改。
python全局变量在整个程序内都有效_Python 全局变量使用相关推荐
- python修改列表中字典内的值_python修改字典内key对应值的方法
python学习笔记:字典 python版本:Python 2.6.6 系统环境:CentOS release 6.2 x86_64 本文参考了互联网上前辈的一些文章 一.字典是python中最灵活的 ...
- python写微信小程序源码示例_python实现微信小程序用户登录、模板推送
python实现微信小程序用户登录.模板推送 来源:中文源码网 浏览: 次 日期:2019年11月5日 [下载文档: python实现微信小程序用户登录.模板推送.txt ] (友情提示 ...
- python中的作用域以及内置函数globals()-全局变量、locals()-局部变量
在python中,函数会创建一个自己的作用域,也称为为命名空间.这意味着在函数内部访问某个变量时,函数会优先在自己的命名空间中寻找. 通过内置函数globals()返回的是python解释器能知道的变 ...
- python这个软件学会能做什么工作-万万没想到,学会Python即使不做程序员都能月入过万!...
昨天,我公司面试了1个同学,应聘新媒体运营,专业能力还不错.他简历上技能栏还写着会Python,我问了他一个通过爬虫采集数据的问题,他都顺畅的答出来了. 最后聊薪资时,他说期待7000,我直接给他开了 ...
- 不从事编程、学python有用吗-没想到,学会Python即使不做程序员都能月入过万!...
昨天,我公司面试了1个同学,应聘新媒体运营,专业能力还不错.他简历上技能栏还写着会Python,我问了他一个通过爬虫采集数据的问题,他都顺畅的答出来了. 最后聊薪资时,他说期待7000,我直接给他开了 ...
- 不想学python-没想到,学会Python即使不做程序员都能月入过万!
昨天,我公司面试了 1 个同学,应聘新媒体运营,专业能力还不错.他简历上技能栏还写着会 Python,我问了他一个通过爬虫采集数据的问题,他都顺畅的答出来了. 最后聊薪资时,他说期待 7000,我直接 ...
- python兼职程序员工资-没想到,学会Python即使不做程序员都能月入过万!
昨天,我公司面试了 1 个同学,应聘新媒体运营,专业能力还不错.他简历上技能栏还写着会 Python,我问了他一个通过爬虫采集数据的问题,他都顺畅的答出来了. 最后聊薪资时,他说期待 7000,我直接 ...
- python列表不包含哪个内置函数_python 列表的推导器和内置函数
#++ =================================== = 列表的推导式 # li = [] # for i in range(1,11): # li.append(i) # ...
- python的shutil模块是内置的_Python之shutil模块11个常用函数详解,python内置函数是什么...
Python之shutil模块11个常用函数详解,python内置函数是什么 shutil 是 Python 中的高级文件操作模块,与os模块形成互补的关系,os主要提供了文件或文件夹的新建.删除.查 ...
最新文章
- realloc,malloc,calloc的区别
- python.exe在哪个文件_pythonexe文件中的images文件夹放在哪里?
- 内核版常见问题和精华贴总结(VER 0.1) [
- 【Qt】QObject详解
- windows 下安装Simplejson方法
- 入门训练 Fibonacci数列
- 8 年后重登王座,Python 再度成为 TIOBE 年度编程语言
- C/C++ OpenCV中值滤波双边滤波
- Fluent API — 流畅API(基于Java介绍)
- [leetcode] 472. 连接词
- DataList 编辑记录时,更新取不到值的原因。
- 大数据平台技术架构-图
- 迅雷服务器IP地址列表的获取办法
- 服装ERP软件有哪些优点?
- 谁是克星?4款网页木马拦截工具大比武
- Glide加载网络图片出现模糊问题
- 注册石墨文档无法连接服务器,石墨文档没有访问权限是怎么回事?权限解决方法看这里!...
- 什么是计算机系统性能,什么系统性能好?电脑发烧友告诉你
- java 405_Http状态405-方法不允许
- MATLAB App Designer生成独立GUI(可执行exe)并添加依赖项