Python get object是dictionary还是if语句更快?

2024-09-25 08:30:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在制作一个python脚本的POST,POST有2个参数。名称和位置,然后返回一个字符串。我的问题是我会有100个这样的选项,在这样的字典里做会更快吗:

myDictionary = {"Name":{"Location":"result", "LocationB":"resultB"},
                "Name2":{"Location2":"result2A", "Location2B":"result2B"}}

然后我用.get("Name").get("Location")得到结果

执行以下操作:

if Name = "Name":
     if Location = "Location":
         result = "result"
     elif Location = "LocationB":
         result = "resultB"
elif Name = "Name2":
         if Location = "Location2B":
             result = "result2A"
         elif Location = "LocationB":
             result = "result2B"

现在如果有成百上千个这样的人,那什么更快呢?还是有更好的办法?你知道吗


Tags: name脚本参数getiflocationresultpost
2条回答

首先:

一般来说,使用字典将键与值进行匹配要比python的好得多。你应该从风格的角度来做。你知道吗

其次:

如果您真的关心性能,python可能并不总是最佳工具。然而,dict方法应该快得多,除非你的选择和创建这些dict一样频繁。创建成千上万的PyObjects来检查你的案例是一个非常糟糕的主意。你知道吗

第三:

如果您非常关心您的应用程序,您可能真的希望像往常一样对这两种解决方案进行基准测试当涉及到性能问题时,包括您的计算平台在内的无数因素只有通过实验才能帮助您解决

第四名地址:

看起来你在构建一个协议解析器。就性能而言,这并不是python的强项。也许您想研究一下可以为您编写C代码解析器的众多工具中的一个,并将其封装在本机模块中,如果操作正确,它肯定比您的任何一个实现都要快。你知道吗

下面是关于Extending Python with C or C++的python文档

我决定测试1000个名字和2个地点的两个场景

测试样品

团队词典:

di = {}
for i in range(1000):
    di["Name{}".format(i)] = {'Location': 'result{}'.format(i), 'LocationB':'result{}B'.format(i)}

def get_dictionary_value():
    di.get("Name999").get("LocationB")

团队If语句:

我使用python脚本生成了一个5000行函数if_statements(name, location):,遵循这个模式

elif name == 'Name994':
    if location == 'Location':
        return 'result994'
    elif location == 'LocationB':
        return 'result994B'

# Some time later ...
def get_if_value():
    if_statements("Name999", "LocationB")

计时结果

您可以使用timeit函数来测试函数完成所需的时间。你知道吗

import timeit
print(timeit.timeit(get_dictionary_value))
# 0.06353...

print(timeit.timeit(get_if_value))
# 6.3684...

所以你有它,字典在我的机器上是100倍的速度比庞大的165kb如果语句函数。你知道吗

相关问题 更多 >