美文网首页测试开发思科DevNetpython基础学习
python_跨文件之间真正的全局变量传参

python_跨文件之间真正的全局变量传参

作者: 古佛青灯度流年 | 来源:发表于2016-09-22 18:49 被阅读6601次
  • 需求:

  • 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

相关文章

网友评论

  • d5f6f61d74d1:我的也不能运行:NameError: global name 'value' is not defined
    求楼主再看下是哪里的问题,只是把globalValue.py代码最后一行缩进了一下,其它都没变,B文件print b时,报的上面的错
    d5f6f61d74d1:@古佛青灯度流年 初学者,这个更新的看不懂
    古佛青灯度流年:我又更新了一版,用最新的吧
    古佛青灯度流年:我的框架都是这么用的,肯定是你用的方式有问题,再没赋值之前就引用了
  • tcwaily:name 'value' is not defined

    怎么破
    古佛青灯度流年:@Miuccica 你要用一个类把这两个方法包起来
    8ac4ad45b706:@古佛青灯度流年 我也是报同样的错,就是在get_value():那里,说value没定义。代码就是用的你的~
    古佛青灯度流年:@tcwaily 你哪里写错了吧,拿上来看看
  • fbec75bd2c8b:照抄的但是失败了,怎么破!?
    第一 global不能作为import的名字不合法。中间名字的脚本不能写成global.py
    第二当前目录的话是不是就不需要加from PATH
    第三还是失败了
    古佛青灯度流年:@陆潇华 1.多谢纠错啊,直接用global确实不可以,写简书的时候没注意;现在已更改为:globalValue.py
    2.如果引用文件与被引用文件在同一目录就不需要from了
    3.应该是可行的,我这没问题

本文标题:python_跨文件之间真正的全局变量传参

本文链接:https://www.haomeiwen.com/subject/zywzettx.html