zoukankan      html  css  js  c++  java
  • Python跨文件全局变量的使用

    尽管某些书籍上总是说避免使用全局变量,但是在实际的需求不断变化中,往往定义一个全局变量是最可靠的方法,但是又必须要避免变量名覆盖。

     

    Python 中 global 关键字可以定义一个变量为全局变量,但是这个仅限于在一个模块(py文件)中调用全局变量:

    我们知道Python使用变量的时候是可以直接使用的,x=[] ,y=2,z="123",而不需要先定义(var x; var y=2;var z='222'),这样的话,在函数内部就无法操作外部的变量了,因为它总会认为你是在定义一个新变量并且赋值,不过 global 就可以解决这个问题。

    global 的基础用法 :

    x = 6
    def func():
        global x #定义外部的x
        x = 1
     
    func()
    print (x)
    #输出1

    这个时候,即使你在另外一个py文件 再次使用 global x 也是无法访问到的,因为在这个py模块中并没有一个叫做x的变量,于是就会报错 未定义。

     

    那么我们怎么办?

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

    新建一个py文件,文件名是:gol.py,具体代码:

    # -*- coding: utf-8 -*-
     
    def _init():#初始化
        global _global_dict
        _global_dict = {}
     
     
    def set_value(key,value):
        """ 定义一个全局变量 """
        _global_dict[key] = value
     
     
    def get_value(key,defValue=None):
      """ 获得一个全局变量,不存在则返回默认值 """
        try:
            return _global_dict[key]
        except KeyError:

    相信如果你看懂了就应该知道思路了,利用global的单独文件全局性,从而可以定义在一个文件中的全局变量,然后这个单个文件的全局变量可以保存多个文件的共同全局变量

    操作的时候,以Key对Value 的方法操作,我相信大家都懂。

    # -*- coding:utf-8 -*-
     
    import gol
     
    gol._init()#先必须在主模块初始化(只在Main模块需要一次即可)
     
     
    #定义跨模块全局变量
    gol.set_value('uuid',uuid)
    gol.set_value('token',token)

    然后其他的任何文件只需要导入即可使用:

    # -*- coding: utf-8 -*-
    import gol
     
    #不需要再初始化了
    ROOT = gol.get_value('uuid')
    CODE = gol.get_value('token')

    就这样就可以实现跨文件的全局变量使用;

    并且还有一个简单但是强大的全局变量管理器,你可以自己添油加醋,实现一些比如全局变量禁止直接修改,禁止修改某些只可读的全局变量等等。

  • 相关阅读:
    sqlmap从入门到精通-第四章-4-6 MySQL数据库导入与导出攻略
    Python文章索引(持续更新~)
    如何用 Python 绘制玫瑰图等常见疫情图
    《民国奇探》的弹幕有点逗比,用 Python 爬下来看看
    发现了合自己胃口的公众号,但文章太多翻来翻去真麻烦,还好我学了 Python
    潘粤明的《龙岭迷窟》到底怎么样?我用 Python 得出了一些结论!
    Python 分析电影《南方车站的聚会》
    使用 Scrapy 爬取去哪儿网景区信息
    Python 爬虫(二):Requests 库
    Python 爬虫(一):爬虫伪装
  • 原文地址:https://www.cnblogs.com/syw20170419/p/10872318.html
Copyright © 2011-2022 走看看