python跨模組使用全域性變數的實現方法
阿新 • • 發佈:2021-06-27
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,所有的用例檔案中都可呼叫,一定程度避免每調一次介面就請求一次登陸介面。