• python跨模块使用全局变量的实现方法


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

    我们知道Python使用变量的时候是可以直接使用的

    a = {}
    b = 111
    c = "333"

    而不需要先定义

    var a
    var b = 2
    var c = '222'

    这样的话,在函数内部就无法操作外部的变量了,因为它总会认为你是在定义一个新变量并且赋值,不过 global 就可以解决这个问题。


    global 的基础用法

    x = 6
    def func():
        global x # 定义全局变量x
        x = 1
    
    func()
    print (x)
    # 输出1

    这个时候,在定义本全局变量的模块内可以随意使用变量x
    但是别的模块(py文件)再次使用 global x 却是无法访问到的,因为在这个py模块中并没有一个叫做x的变量。
    既然只能在本模块可以使用,那么我们就专门为全局变量定义一个全局变量管理模块,然后在别的模块中导入全局变量管理模块,我们以Key-Value的形式存储和获取变量,这样就可以简单的实现全局变量啦。

    全局变量管理模块 global_variable.py

    #!/usr/bin/env python3
    # -*- coding:utf-8-*-
    # 全局变量管理模块
    
    
    def _init():
        """在主模块初始化"""
        global GLOBALS_DICT
        GLOBALS_DICT = {}
    
    
    def set(name, value):
        """设置"""
        try:
            GLOBALS_DICT[name] = value
            return True
        except KeyError:
            return False
    
    
    def get(name):
        """取值"""
        try:
            return GLOBALS_DICT[name]
        except KeyError:
            return "Not Found"
    

    配置文件, 设置全局变量  config.py

    #!/usr/bin/env python3
    # -*- coding: UTF-8 -*-
    # 在本模块中定义全局变量
    
    import global_variable as glv
    
    glv._init()
    
    glv._set("APP_NAME", "全局变量测试")
    glv._set("author", "doudoudzj")
    

    主程序, 获取全局变量 main.py(任意需要使用全局变量的py模块)

    #!/usr/bin/env python3
    # -*- coding: UTF-8 -*-
    # 主程序
    
    import config  # 加载配置
    import global_variable as glv
    
    print(glv._get("APP_NAME"))
    print(glv._get("author")) 

     然后运行主程序文件

    python3 main.py
    # 输出内容如下
    全局变量测试
    doudoudzj
    

    接口自动化中使用场景:

    比如系统的所有接口都依赖登录接口返回的token,那么就可以在config.py文件中调用登录的接口,拿到登录接口返回的token并调用_set()方法设置token为全局变量,则接下来要测试用例文件中通过_get()方法即可获取到请求所需要的token,所有的用例文件中都可调用,一定程度避免每调一次接口就请求一次登陆接口。

     
  • 相关阅读:
    关于Log4j的初始化
    Golang-interface(四 反射)
    JavaScript学习总结-技巧、有用函数、简洁方法、编程细节
    玩转iOS开发
    小谈一下Java I/O
    [ACM] 最短路算法整理(bellman_ford , SPFA , floyed , dijkstra 思想,步骤及模板)
    已超过了锁请求超时时段。 (Microsoft SQL Server,错误: 1222)
    计数排序
    跟我学solr---吐槽一下,我的文章被抄袭啦
    Navicat11全系列激活工具和使用方法
  • 原文地址:https://www.cnblogs.com/wulixia/p/14942434.html
Copyright © 2020-2023  润新知