-
需求:
-
A.py文件中的得到參數(shù)value,需要在B.py文件中使用value的值
-
解決思路:
-
1.全局變量只能在當(dāng)前文件中生效,所以即使將value聲明為全局變量也不能在B.py中使用
-
2.這個需求給人的一種錯覺就是钱反,跟引用函數(shù)差不多盛垦,我在B中引用A是不是可行呢?答案是否定的,引用的過程中并不能將該參數(shù)值進(jìn)行存儲
-
3.聯(lián)想到一種參數(shù)傳遞方法环肘,在主函數(shù)中(主文件)給參數(shù)賦值,在子文件中調(diào)用:
import Main.py Main.value
集灌,這種方法可行悔雹,但是條件比較苛刻,對參數(shù)源要求比較高欣喧,并不是在任意路徑都能使用的
-
解決方法:
-
綜合以上4中方式腌零,可以找出可行方法:設(shè)置中間文件保持 value
-
-
具體實現(xiàn):
通過使用java的map聯(lián)想到python中可以通過字典來實現(xiàn)一個大集合的全局變量的方法
# 拼裝成字典構(gòu)造全局變量 借鑒map 包含變量的增刪改查
map = {}
def set_map(key, value):
map[key] = value
def del_map(key):
try:
del map[key]
except KeyError:
print "key:'"+str(key)+"' 不存在"
def get_map(key):
try:
if key in "all":
return map
return map[key]
except KeyError as e:
print "key:'"+str(key)+"' 不存在"
-
方法進(jìn)階
class GlobalMap:
# 拼裝成字典構(gòu)造全局變量 借鑒map 包含變量的增刪改查
map = {}
def set_map(self, key, value):
if(isinstance(value,dict)):
value = json.dumps(value)
self.map[key] = value
def set(self, **keys):
try:
for key_, value_ in keys.items():
self.map[key_] = str(value_)
log.debug(key_+":"+str(value_))
except BaseException as msg:
log.error(msg)
raise msg
def del_map(self, key):
try:
del self.map[key]
return self.map
except KeyError:
log.error("key:'" + str(key) + "' 不存在")
def get(self,*args):
try:
dic = {}
for key in args:
if len(args)==1:
dic = self.map[key]
log.debug(key+":"+str(dic))
elif len(args)==1 and args[0]=='all':
dic = self.map
else:
dic[key]=self.map[key]
return dic
except KeyError:
log.warning("key:'" + str(key) + "' 不存在")
return 'Null_'
-
總結(jié):
- 方法很簡單,一看就能懂唆阿,但是為啥沒想到呢益涧,一是經(jīng)驗不足,二是要經(jīng)逞北睿總結(jié)闲询,學(xué)會真正的舉一反三
@晴 --2016-09-22 18:49:47