IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    [原]5.3.1.1 ChainMap的例子和技巧

    caimouse发表于 2015-12-26 09:03:39
    love 0

    下面来提供一些ChainMap类使用的场合和技巧:

    模拟python内部查获命名变量的映射链:

    #python 3.4

    import builtins

    import collections

    pylookup = collections.ChainMap(locals(), globals(), vars(builtins))

    print(pylookup)

    在这个例子里,把本地作用域命名、全局作用域命名和内置作用域命名通过链式放在一起,查找时会先本地,再到全局,最后才是内置作用域。

     

    让命令行参数优先操作系统环境变量参数,操作系统环境变量参数又优先于缺省值的例子:

    #python 3.4

    import collections

    import os, argparse

     

    defaults = {'color': 'red', 'user': 'guest'}

     

    parser = argparse.ArgumentParser()

    parser.add_argument('-u', '--user')

    parser.add_argument('-c', '--color')

    namespace = parser.parse_args()

    command_line_args = {k:v for k, v in vars(namespace).items() if v}

     

    combined = collections.ChainMap(command_line_args, os.environ, defaults)

    print(combined['color'])

    print(combined['user'])

    结果输出如下:

    red

    guest

    在这个例子里,要注意这行代码:

    collections.ChainMap(command_line_args, os.environ, defaults)

    放前面的字典就是最先搜索,最后面的就是最后搜索。

     


    蔡军生  QQ:9073204 深圳



沪ICP备19023445号-2号
友情链接