美文网首页
Python 全局变量使用

Python 全局变量使用

作者: 不要重名就好 | 来源:发表于2020-05-04 08:47 被阅读0次

在平时的开发中我们有时候会用到全局变量,但是很多开发语言不允许使用或者建议少使用全局变量,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 全局变量、LEGB原则

    全局变量 Python 的全局变量是模块 (module) 级别的 当在函数中使用变量名时,Python 依次搜索...

  • Python3 跨文件全局变量的使用

    全局变量的新手误区 Python 3 实现定义跨模块的全局变量和使用

  • Python 中 global 的用法总结

    在 java 中,想声明一个全局变量可以用到 static,python 中则是使用 global 来达到全局变量...

  • python函数

    函数 全局变量 获取全局变量python获取全局变量直接获取 修改全局变量python不允许直接修改全局变量如果要...

  • Python 全局变量使用

    在平时的开发中我们有时候会用到全局变量,但是很多开发语言不允许使用或者建议少使用全局变量,Python也是如此。但...

  • python 局部变量和全局变量使用 2021-11-05

    python 局部变量和全局变量使用 a = 666 def modify_a():global aa = 20...

  • python07-自带全局变量

    python自带的全局变量 python默认会自带某些全局变量,它们有特殊的含义: __file__:文件的全路径...

  • python自学计划-全局变量-19

    python中的全局变量的使用方式如下:声明方式: 使用方式:如果是在同级别下,就直接使用,如果是在子级别下,需要...

  • 提升Python程序运行效率的方法

    代码优化技巧 1.字符串连接缓慢,不要在循环中执行,而是使用Python的join方法。 2.尽量不使用全局变量 ...

  • local variable 'xxx' ref

    这是在python的使用中出现的问题,经过查询是全局变量在局部函数中使用并更改的问题。先引用如下的原博客来记录。 ...

网友评论

      本文标题:Python 全局变量使用

      本文链接:https://www.haomeiwen.com/subject/vdxeghtx.html