eval 跟json.loads
是不一样的函数,是有实现不一样功能的地方,但是在某些地方它们两个函数的功能是一样的,在这个时候如果对执行效率有一定要求的话,建议不要用eval,改用json.loads会有惊喜哦。

<>一、eval

eval() 函数用来执行一个字符串表达式,并返回表达式的值。

<>二、json.loads

json.loads 用于解码 JSON 数据。该函数返回 Python 字段的数据类型。

<>三、效率对比

eval 跟 json.loads
有时候都会用在对储存成列表字符串或者字典字符串的数据转换为python对象,使其成为python的list,dict格式的数据,方便进行计算。
本次试验只针对上面这种情况下做的对比
def test_time_list(func): from time import time start = time() a = str(list(
range(10000))) for i in range(100): func(a) print('{} Time: {:5.2f}s'.format(str
(func),time() - start)) def test_time_dict(func): from time import time a_dict =
{} for i in range(10000): a_dict[i]=i start = time() a = str(json.dumps(a_dict))
for i in range(100): func(a) print('{} Time: {:5.2f}s'.format(str(func),time() -
start)) if __name__ == '__main__': import json,msgpack test_time_list(eval)
test_time_list(json.loads) test_time_dict(eval) test_time_dict(json.loads)
输出结果为:

可以看到,用json.loads的结果都比eval要快了10倍以上,列表的转换速度更快。

但是使用json.loads有个地方需要注意一下,json.loads对列表没什么要求,但是对字典的格式有一定的要求,key值要保持是双引号的key,单引号的key或者int类型都会报错。
报错内容如下
json.decoder.JSONDecodeError: Expecting property name enclosed in double
quotes: line 1 column 2 (char 1)

因此字典的话建议储存格式就是要用json.dumps转换成标准的json格式然后再储存成字符串。

另外如果是其他序列化格式的,对json的速度不满意的可以考虑用一下msgpack,使用方式也很简单,但是也是对格式有一定的要求,有很多博主进行过测试,都是比json快几倍以上。这里就不详讲了。

我是一只前进的蚂蚁,希望能一起前行。

如果对您有一点帮助,一个赞就够了,感谢!

注:如果本篇博客有任何错误和建议,欢迎各位指出,不胜感激!!!

技术
©2019-2020 Toolsou All rights reserved,
TP6验证器的使用示例及正确验证数据自宣布投资比特币以来 特斯拉市值蒸发逾2000亿美元华为认证HCIA-AI人工智能Java基础(冒泡排序)IAR安装使用教程GDOI2019 游记关于过年PYTHON入门期末复习汇总蚂蚁集团董事长井贤栋安抚员工:公司终究会上市的王者荣耀背景故事整合