5.3.1.1 ChainMap的例子和技巧


下面来提供一些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)

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

相关内容

    暂无相关文章

评论关闭