学习httpbin源码记录(一)
来源:互联网 发布:域名怎么和服务器绑定 编辑:程序博客网 时间:2024/05/24 02:39
class CaseInsensitiveDict(dict):
def _lower_keys(self):
return [k.lower() for k in self.keys()]
def __contains__(self, key):
return key.lower() in self._lower_keys()
def __getitem__(self, key):
return list(self.items())[self._lower_keys().index(key.lower())][1]
测试代码如下:
testDict = {"AA": "123", "bb": "A Good World!"}
args = CaseInsensitiveDict(testDict)
print 'aa' in args
运行结果为:
True
同样,print 'BB' in args的运行结果同样为True
我的理解如下:
当使用in操作去判断key是否存在于一个dict中时,dict会主动调用它自己的__contains__函数,而根据上面的代码可以看到
__contains__函数使用key.lower() in self._lower_keys()去判断,即先将当前key变为小写,然后判断它是否存在于dict的keys的集合中(全部是小写的keys)
因此,在判断的时候,完全不必担心传递进去的key是大写还是小写,因为内部的判断全是依据小写来进行的,正如类名所展示的那样,CaseInsensitive
即对大小写不敏感!
承接上面的论述,理解__getitem__如下:
testDict = {"AA": "123", "bb": "A Good World!"}
args = CaseInsensitiveDict(testDict)
a = list(testDict.items())
print a
结果为
[('AA', '123'), ('bb', 'A Good World!')]
可见 list(self.items()) 的结果是一个列表,而列表中的元素是由字典的key:value对构成的一个个元组
再然后就是根据index去读取列表的元素值,无须赘述
- 学习httpbin源码记录(一)
- 学习httpbin源码记录(三)
- 学习httpbin源码记录(四)
- 学习httpbin源代码记录(二)
- httpbin 学习笔记.
- httpbin
- httpbin
- nginx源码学习记录(一)
- Launcher源码学习记录(一)
- 《Android设计模式与源码解析》学习记录一
- cglib源码学习记录
- select 源码学习记录
- 记录源码学习列表
- 源码学习记录
- caffe源码学习记录
- <学习记录>Queue源码学习
- mysql学习记录 一
- c 学习记录 一
- C++单例模式
- JVM (PART IX) 内存分配与回收策略
- NIO
- Fedora12安装VMware-tool
- easyui-tree
- 学习httpbin源码记录(一)
- 程序员修炼之道:从小工到专家读书笔记
- [JLOI2013]卡牌游戏 (洛谷2059)
- 数据挖掘 —— 从入门到求职
- codeforces 587B Duff in Beach (dp)
- 哈希堆的实现
- storm学习(三)
- Leetcode---2.Add Two Numbers
- oracle 数据类型详解---日期型