python的内建模块ChainMap可以把一组dict串起来并组成一个逻辑上的dictChainMap本身也是一个dict,但是查找的时候,会按照顺序在内部的dict依次查找。

什么时候使用ChainMap最合适?举个例子:应用程序往往都需要传入参数,参数可以通过 命令行 | 环境变量 | 默认参数 传入,

我们可以用ChainMap实现参数的查找优先级:命令行参数 > 环境变量 > 默认参数。

下面的代码演示了如何查找usercolor这两个参数:

from collections import ChainMap
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 } # 组合成ChainMap:
combined = ChainMap(command_line_args, os.environ, defaults) # 打印参数:
print('color=%s' % combined['color'])
print('user=%s' % combined['user'])

没有任何参数时,打印出默认参数:

$ python3 use_chainmap.py
color=red
user=guest

当传入命令行参数时,优先使用命令行参数:

$ python3 use_chainmap.py -u bob
color=red
user=bob

同时传入命令行参数和环境变量,命令行参数的优先级较高:

$ user=admin color=green python3 use_chainmap.py -u bob
color=green
user=bob

https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/001431953239820157155d21c494e5786fce303f3018c86000

最新文章

  1. windows 7(32/64位)GHO安装指南(系统安装篇)~重点哦!!~~~~
  2. Ajax入门(一)
  3. 【原创】SQL常用函数
  4. javaScript代码执行顺序
  5. kuangbin_MST A (POJ 1251)
  6. C# 绘制统计图(柱状图, 折线图, 扇形图)
  7. MVVM模式的一个小例子
  8. LeetCode_Rotate Image
  9. 只有勇敢的人、鲁莽的人和绝望的人才会追求大的变革 – D.J. Anderson
  10. firemonkey打开子窗体(匿名回调函数)
  11. Swift - 使用CATransition制作过渡动画(页面切换转场效果)
  12. android 5.0新特性
  13. Vim/gvim容易忘记的快捷键
  14. angular.js之作用域scope'@','=','&'
  15. Myeclipse10破解版安装包
  16. 测试 ASP.NET Core API Controller
  17. Java虚拟机详解----JVM内存结构
  18. eclipse中的web项目部署路径
  19. siteServer创建网站中Mysql和SqlServer的区别
  20. zabbix3.4 监控网卡流量设置差量

热门文章

  1. 十一、结构模式之享元(Flyweight)模式
  2. 力扣—Remove Nth Node From End of List(删除链表的倒数第N个节点) python实现
  3. 修改Docker中容器的时间和宿主主机时间一致
  4. java 延时
  5. github 配置ssh
  6. pipeline语法之environment,dir(),deleteDir()方法,readJSON,writeJSON
  7. 关键字group by 、 Having的 用法
  8. JVM&GC
  9. testNG之组测试
  10. css 导航菜单+下拉菜单