起步
从字典中取值有两个方法,一个是先判断key是否在字典中再取值;另一个是包裹try块中直接去取值:
Python资源共享群:484031800
def use_in(d, key):if key in d:return d[key]return None
def use_try(d, key):try:return d[key]except KeyError:passreturn None
python如何遍历字典中的key和value,性能比较
用 timeit 模块来查看它们的运行时间,测试环境 win10 + python3.6.8:
import timeit
def use_in(d, key):if key in d:return d[key]return None
def use_try(d, key):try:return d[key]except KeyError:passreturn None
cache = {}
for i in range(100):cache[i] = True
perf_dict = {'in: hit': min(timeit.repeat(lambda: use_in(cache, 50))),'in:not hit': min(timeit.repeat(lambda: use_in(cache, 150))),'try: hit': min(timeit.repeat(lambda: use_try(cache, 50))),'try:not hit': min(timeit.repeat(lambda: use_try(cache, 150))),
}
print(perf_dict)
得到结果:
{'in: hit': 0.32121160000000004, 'in:not hit': 0.2666487000000002, 'try: hit': 0.27908409999999995, 'try:not hit': 0.5742989999999999
}
好像用 try 的方式的快一些,但当不命中的时候几乎慢了一倍多。所以平均下来这两个方法性能其实没啥区别。
python中datetime函数的用法。标准库里会用哪种方法呢
比较好奇标准库中会用哪种方法呢?
in先判断的方式
argparse 模块中:
python中datetime用法?
linecache 模块:
dummy_threading 模块:
try块的方式
re 模块中的 _compile 中:
string 模块中:
datetime 模块中:
functools 模块中:
copy 模块:
threading 模块:
更多的就不举例了,可以看到,在标准库里大多还是使用 try 块的方式。然后是一些不常用或者比较“新”的模块才用 in 判断方式。可能是早先前的字典不支持 in 操作吧。
版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态