5.3.1.1 ChainMap的例子和技巧
2015-12-26 09:03
363 查看
下面来提供一些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 深圳
模拟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 深圳
相关文章推荐
- 5.3.1.1 ChainMap的例子和技巧
- VS2010升级VS2013后,出现没有定义类型“PowerPacks.ShapeContainer”错误解决方法
- RAID 各级别特性
- Gfx.WaitForPresent
- POJ 3735 Training Little Cats
- error TRK0005: Failed to locate: "CL.exe"
- ubuntu sendmail(只作为本机发送)
- 【Codeforces Round 272 (Div 2)B】【暴力dfs or 组合数】Dreamoon and WiFi 问号填加减方案数使得最后恰好增量为aim
- (转)图灵测试与人工智能
- LNMP环境下SendMail+OpenWebMail的详细配置
- Linking Containers Together
- 如何用UltraISO制作大于4G文件的光盘映像可启动U盘
- CodeBlock编辑器GCC环境下,编译报错:Execution of 'mingw32-g++.exe -o bin\Debug\test.exe obj\Debug\main.o' in 'C
- 菜鸟初识AIDL进程通信
- error: ‘asm’ operand has impossible constraints
- JetBrains转向全新订阅模式,更换全线产品logo
- list.contains()方法的使用
- Failed to connect to 127.0.0.1:27017, reason: errno:111 Connection refused(MongoDB启动异常)
- ld: 1 duplicate symbol for architecture arm64 clang: error: linker command failed with exit code 1
- Xcode7真机测试libUMSocial_Sdk_4.2.2.a(UMSShareListController.o)' does not contain bitcode.