0

这似乎是一个离题的问题,但我想知道编程的正确方法(或者更好地说是有效的方法)。

假设我们有一个 Web 应用程序,并且在一个函数内部,我们必须检查字典键是否具有特定值(或者它可以应用于任何对象属性检查)。这些方式中哪一种更有效(在内存或速度方面),为什么?或者,如果这是一种错误的做法,为什么?

if myDictionary.get("xy") == "defined value":
    runSomeFunction(myDictionary.get("xy"))

或者

myVar = myDictonary.get("xy", "")
if myVar == "defined value":
    runSomeFunction(myVar)

我们处理此代码的方式可能会有更多样化的讨论——在 Web 应用程序中(每分钟有数百个请求)或在普通脚本中作为最佳编程方式。

提前感谢您的任何意见。

4

2 回答 2

4

如果这种微优化是相关的,那么使用脚本语言是错误的技术选择。因此,除了常见的“基准它”之外,唯一正确的答案是:这并不重要。保持代码可读。

更多技术解释:dict使用哈希映射实现,即它有O(1)查找。所以访问一个元素非常快。我的猜测是临时变量要快一点,因为它不涉及计算密钥的哈希值两次。

具有 100 万次迭代的timeit基准测试显示以下时间:

  • 0.3209540843963623(无温度变量)
  • 0.3401560783386230(温度变量)

所以使用临时变量实际上要慢一些。但请注意,这是针对 1M 次迭代的。所以每次的实际平均差异只有 0.00000002 秒。这没什么,只是证明了我的初衷:不要对不需要优化的东西进行微优化。保持你的代码可读。

于 2013-09-03T13:29:15.817 回答
1

我不确定你为什么使用get()dict 的方法。在您不知道密钥是否存在的情况下应该使用此方法——您没有提到是这种情况。所以我想知道你为什么不这样做:

if myDictionary["xy"] == "defined value":
    ...

样式说明:通常 CamelCasing 仅用于类名;更多 Pythonic 名称将是my_dictionaryand run_some_function

字典查找速度很快。通过对您的应用程序进行基准测试,确保这确实是一个瓶颈——在不知道您的代码的情况下,我几乎可以肯定它不是。Python 在内部几乎对所有内容都使用字典,这种特定的字典访问不太可能导致性能问题。

于 2013-09-03T13:40:06.757 回答