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)

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

 


蔡军生  QQ:9073204 深圳

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

caimouse

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值