-
需求:
-
A.py文件中的得到参数value,需要在B.py文件中使用value的值
-
解决思路:
-
1.全局变量只能在当前文件中生效,所以即使将value声明为全局变量也不能在B.py中使用
-
2.这个需求给人的一种错觉就是,跟引用函数差不多,我在B中引用A是不是可行呢?答案是否定的,引用的过程中并不能将该参数值进行存储
-
3.联想到一种参数传递方法,在主函数中(主文件)给参数赋值,在子文件中调用:
import Main.py Main.value
,这种方法可行,但是条件比较苛刻,对参数源要求比较高,并不是在任意路径都能使用的
-
解决方法:
-
综合以上4中方式,可以找出可行方法:设置中间文件保持 value
-
-
具体实现:
-
通过使用java的map联想到python中可以通过字典来实现一个大集合的全局变量的方法
# 拼装成字典构造全局变量 借鉴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)+"' 不存在"
-
方法进阶
class GlobalMap:
# 拼装成字典构造全局变量 借鉴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_'
-
总结:
- 方法很简单,一看就能懂,但是为啥没想到呢,一是经验不足,二是要经常总结,学会真正的举一反三
@晴 --2016-09-22 18:49:47
网友评论
求楼主再看下是哪里的问题,只是把globalValue.py代码最后一行缩进了一下,其它都没变,B文件print b时,报的上面的错
怎么破
第一 global不能作为import的名字不合法。中间名字的脚本不能写成global.py
第二当前目录的话是不是就不需要加from PATH
第三还是失败了
2.如果引用文件与被引用文件在同一目录就不需要from了
3.应该是可行的,我这没问题