Python 在大数据处理下的优化(一)用json.loads比eval快10倍!!

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快几倍以上。这里就不详讲了。

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

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

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

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值