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,所有的用例文件中都可調用,一定程度避免每調一次接口就請求一次登陸接口。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM