RELATEED CONSULTING
相关咨询
选择下列产品马上在线沟通
服务时间:8:30-17:00
你可能遇到了下面的问题
关闭右侧工具栏

新闻中心

这里有您想知道的互联网营销解决方案
Python全局变量在不同模块中共享的原理是什么

本篇内容主要讲解“Python全局变量在不同模块中共享的原理是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python全局变量在不同模块中共享的原理是什么”吧!

创新互联主要从事成都网站设计、成都做网站、网页设计、企业做网站、公司建网站等业务。立足成都服务沽源,十载网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:18982081108

全局变量引用与修改

使用到的全局变量只是作为引用,不在函数中修改它的值的话,不需要加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"这一语句无法创建同名的局部变量。

Python全局变量在不同模块中共享的原理是什么

因此,需要修改全局变量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 aimport 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'))

Python全局变量在不同模块中共享的原理是什么

到此,相信大家对“Python全局变量在不同模块中共享的原理是什么”有了更深的了解,不妨来实际操作一番吧!这里是创新互联网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!


分享文章:Python全局变量在不同模块中共享的原理是什么
标题来源:http://lswzjz.com/article/gijhgg.html