Python全局变量在不同模块中共享

全局变量引用与修改

使用到的全局变量只是作为引用,不在函数中修改它的值的话,不需要加global关键字

a = 1
b = [1,2]

def func():
    print(a, b)

if __name__ == '__main__':
    func()

使用到的全局变量,需要在函数中修改的话,就涉及到歧义问题

a = 1
b = [1,2]

def func():
    a = 2
    b[0] = 3
    print(a, b)

if __name__ == '__main__':
    func()

变量a,在函数func中"a = 2",既可以表示引用全局变量a,也可以表示创建一个新的局部变量,此时python默认按照新的局部变量来处理,但对于列表b而言,"b[0] = 1"不存在这种歧义,因此直接修改了全局变量,但是如果改成了"b = [3, 4]",那么b也会变成局部变量

特别地,当在func中a = 2之前加入"if a == 1:"这一语句,脚本运行出错,因为这一语句引入了全局变量,导致了"a = 2"这一语句无法创建同名的局部变量。

up-5b4969df48e5e34e6c2e2823429cd7bb97c.png

因此,需要修改全局变量a,可以在"a = 2"之前加入global a声明,如:

a = 1
b = [2, 3]


def func():
    global a
    a = 2
    b[0] = 1


if __name__ == '__main__':
    func()

结论:引用全局变量,不需要golbal声明,修改全局变量,需要使用global声明,特别地,列表、字典等如果只是修改其中元素的值,可以直接使用全局变量,不需要global声明。

跨文件共享全局变量

Python 中 global 关键字可以定义一个变量为全局变量,但是这个仅限于在一个模块(py文件)中调用全局变量,在另外一个py文件 再次使用 global x 也是无法访问到的,因为在这个py模块中并没有一个叫做x的变量,于是就会报错 未定义。

借鉴global 关键字的思路,既然在一个文件里面可以生效的话,那么我们就专门为全局变量定义一个“全局变量管理模块”就好了

全局变量管理模块 globalvar.py

def _init():
    global _global_dict
    _global_dict = {}

def set_value(name, value):
    _global_dict[name] = value

def get_value(name, defValue=None):
    try:
        return _global_dict[name]
    except KeyError:
        return defValue

设置全局变量  a.py

import sys
import globalvar as gl

gl._init()

gl.set_value('name', 'cc')
gl.set_value('score', 90)

获取全局变量  b.py

import globalvar as gl

name = gl.get_value('name')
score = gl.get_value('score')

print("%s: %s" % (name, score))

主程序  main.py

import a
import b

运行主程序文件   python main.py,得出的结果是  cc: 90

原理解释

形式上全局变量在不同模块中共享,其实还是遵循全局变量仅限于在一个模块使用原则,a、b两个模块都有同样的模块引入

import globalvar as gl

虽然形式上是在不同文件中操作相同的全局变量,但实质上都是操作一个文件(globalvar)中的全局变量,main.py略作修改

import a
import b
import globalvar as gl

print(gl.get_value('name'))

 

  • 8
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
### 回答1: 在Python全局变量是定义在模块级别的,它们可以在当前模块的任何函数使用和修改。如果全局变量需要在多个模块使用,可以通过导入模块来实现。 在使用全局变量时,需要注意以下几点: 首先,全局变量应该在模块的顶部定义。这样可以让代码更加清晰易懂,也可以避免函数意外地定义与全局变量重名的变量导致的不必要错误。 其次,在函数使用全局变量时,需要使用“global”关键字进行声明。这样才能让函数内的修改生效,否则会被认为是在函数内定义了一个新的局部变量。 最后,使用全局变量时需要谨慎,因为全局变量的访问和修改是无限制的,容易导致程序出现错误和不可预测行为。因此,在编写代码时,应该尽量避免使用过多的全局变量,而是封装成函数或者类进行操作,提高代码的可读性和可维护性。 总的来说,全局变量Python是一种重要的变量类型,可以方便的在不同的函数和模块进行共享和修改。但是,需要注意一些细节,才能发挥它的作用。 ### 回答2: Python全局变量是定义在整个程序之外,在整个程序的任何地方都可以被访问到的变量。在Python全局变量是在函数外部定义的,但是在函数内部如果要使用全局变量,需要使用global关键字将其声明为全局变量Python全局变量的作用是在整个程序保存一些需要在不同的函数使用的变量,避免重复定义和使用,提高程序的效率和可读性。在使用全局变量时需要注意一些问题,如多线程环境下全局变量的并发访问可能会导致数据异常,因此需要加锁保证线程安全。 Python还有一种与全局变量相类似的变量,即在函数内部定义的非局部变量。这种变量可以在函数内部进行修改,但是不会影响到函数外部的同名变量。与全局变量不同的是,非局部变量只在函数内部有效,无法在函数外部进行访问。 总之,Python全局变量是一种方便快捷的数据存储方式,在程序设计时需要注意合理使用和使用规范,以避免出现不必要的问题。 ### 回答3: Python 全局变量是指在函数、模块以及脚本文件等 Python 程序不同作用域定义的变量,它们可以在任意位置进行访问和修改。在 Python 全局变量可以通过关键字 global 来进行声明,从而实现在局部作用域内对全局变量进行修改。 在 Python ,如果一个变量在函数外部定义,它就是一个全局变量,在任何函数内都可以访问到。在函数内部,如果要对全局变量进行修改,则需要在函数内部使用 global 关键字进行声明,以便 Python 引擎明确区分该变量是局部变量还是全局变量。 下面是一个全局变量的例子: ``` a = 10 # 定义全局变量 def func1(): global a # 在函数内部使用 global 关键字进行声明 a = 20 # 修改全局变量 def func2(): print(a) # 输出全局变量 func1() func2() # 执行结果为 20 ``` 在以上的代码,我们首先定义了一个全局变量 a,并在 func1 函数使用 global 关键字对其进行声明;然后,在 func1 函数对该全局变量进行了修改。最后,我们调用 func2 函数输出全局变量的值。由于在 func1 修改了全局变量的值,所以在 func2 输出的结果为 20。 需要注意的是,全局变量虽然对任何函数都是可见的,但是在程序过度使用全局变量会导致变量名冲突、代码难以维护等诸多问题,因此在编写程序时应尽量避免滥用全局变量
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

山水好风光

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值