1. 程式人生 > 其它 >python跨模組使用全域性變數的實現方法

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,所有的用例檔案中都可呼叫,一定程度避免每調一次介面就請求一次登陸介面。