python 公共變數 python 共享全域性變數

2021-10-11 00:05:48 字數 1891 閱讀 6464

0x01 場景

最近幾次遇到下面場景:

函式呼叫關係 a->b->c->d->e->f->g

g處需要乙個x資料,但這個x資料只有a處出現過,中間過程由於某種原因難以修改 (比如 中間某一階段程式外其他人員寫的幾百個外掛程式,在模板設立之初就沒有考慮傳遞該資料,改模板意味著要改幾百個外掛程式)

0x02 將資料傳入類本身裡

這裡並不是指類的例項,而是在a截斷就將資料傳入g呼叫的類裡。

每個類相當於乙個模板,在程序開啟的時候,只存乙份在記憶體中。

將資料直接懟到類裡作為乙個屬性,就可以實現在a處跳著直接傳資料給g。

0x03 更簡單通用的方法

0x02中使用的類其實是使用了其可變物件存的是指標的特點。

如此可以另起乙個檔案,用於儲存乙個可變物件,可以是:

佇列字典

類類物件

之後在檔案a處引用並改動 (傳入資料),在g處引用拿出資料就好了。

0x04 例項

__init__.py

my_class.py

my_test_1.py

my_test_2.py

# my_class.py

myconf = "null"

myaaa =

class mycl:

my_param = ""

def __init__(self):

pass

# my_test_1.py

""" 如果在程式開頭設定乙個類的變數,在其他地方能呼叫麼 """

from sqlmap_qps_test.my_test_2 import func_two

from sqlmap_qps_test.my_class import mycl, myaaa

from sqlmap_qps_test.my_class import myconf

import sqlmap_qps_test

mycl.my_param = "1"

mycl()

sqlmap_qps_test.myconf = "2"

func_two()

# my_test_2.py

def func_two():

from sqlmap_qps_test.my_class import mycl

mm = mycl()

print(mm.my_param)

from sqlmap_qps_test.my_class import myconf

print(myconf)

import sqlmap_qps_test

print(sqlmap_qps_test.myconf)

from sqlmap_qps_test.my_class import myaaa

print(myaaa)

執行my_test_1.py結果

null

['3']

第一行 mm.my_param 為 1,被修改

在test_1中,1被傳入作為類的屬性,所以在test_2中,屬性呼叫拿到這個1

第二行 myconf 為null,無改動

在test_1中,修改了 sqlmap_qps_test這個檔案(指標存在)裡的myconf;在test_2中,引入了myconf,直接傳入乙個字串,另外乙個位址,而不是sqlmap_qps_test檔案指向的屬性。

所以之間修改互不影響

第三行 sqlmap_qps_test.myconf.myconf,被修改

在test_1中,修改了 sqlmap_qps_test這個檔案(指標存在)裡的myconf;test_2呼叫拿到了檔案位址指向的myconf

第四行 佇列 myaaa ,被修改

在test_1中,修改了佇列例項;在test_2中,拿到了佇列例項的位址,也拿到了修改後的內容

python中var是什麼變數 Python 變數

1.python的變數是什麼 變數是用來儲存電腦程式中的資訊,唯一的目的是將資料儲存在記憶體中。2.python變數的組成 變數由字母 數字 下劃線組成 變數的第一位不能是數字,可以是字母或下劃線 python中的關鍵字不能作為變數。python中的關鍵字 and as assert break c...

CCF 201709 2 公共鑰匙盒 python

box 鑰匙盒中鑰匙的編號 timeline 時間線 字典型別timeline用以記錄整個鑰匙的借還過程 timeline 借出鑰匙時記錄在timeline中的為鑰匙編號w,還回鑰匙則使用w n。用以區分借和還,因為題幹中要求同一時刻若有借有還則先還後借,負數方便後面排序。若同一時刻存在多次借出鑰匙...

Python學習(9) 高階變數型別 公共方法

python 包含了以下內建函式 函式描述 備註len item 計算容器中元素個數 del item 刪除變數 del 有兩種方式 max item 返回容器中元素最大值 如果是字典,只針對 key 比較 min item 返回容器中元素最小值 如果是字典,只針對 key 比較 cmp item1...