Python字典vs If语句速度

Python字典vs If语句速度,第1张

Python字典vs If语句速度

但是,大多数讨论都是关于某人的工作,最后只是讨论他们应该首先优化代码的其他部分,除非您进行了数百万次的 *** 作,否则这无关紧要。谁能解释为什么?

通常,只有在确实需要的时候才应该优化代码,即,如果程序的性能异常缓慢。

在这种情况下,您应该使用探查器确定哪些零件实际上引起最多的问题。对于Python,cProfile模块对此非常有用。

有人了解python和低级执行之间的层可以解释其工作原理吗?

如果您想了解代码的执行方式,请查看dis模块。

一个简单的例子…

import dis# Here are the things we might want to dodef do_something_a():    print 'I did a'def do_something_b():    print 'I did b'def do_something_c():    print 'I did c'# Case 1def f1(x):    if x == 1:        do_something_a()    elif x == 2:        do_something_b()    elif x == 3:        do_something_c()# Case 2FUNC_MAP = {1: do_something_a, 2: do_something_b, 3: do_something_c}def f2(x):    FUNC_MAP[x]()# Show how the functions executeprint 'Case 1'dis.dis(f1)print 'nnCase 2'dis.dis(f2)

…输出…

Case 1 180 LOAD_FAST     0 (x)   3 LOAD_ConST    1 (1)   6 COMPARE_OP    2 (==)   9 POP_JUMP_IF_FALSE       22 19          12 LOAD_GLOBAL   0 (do_something_a)  15 CALL_FUNCTION 0  18 POP_TOP  19 JUMP_FORWARD 44 (to 66) 20     >>   22 LOAD_FAST     0 (x)  25 LOAD_ConST    2 (2)  28 COMPARE_OP    2 (==)  31 POP_JUMP_IF_FALSE       44 21          34 LOAD_GLOBAL   1 (do_something_b)  37 CALL_FUNCTION 0  40 POP_TOP  41 JUMP_FORWARD 22 (to 66) 22     >>   44 LOAD_FAST     0 (x)  47 LOAD_ConST    3 (3)  50 COMPARE_OP    2 (==)  53 POP_JUMP_IF_FALSE       66 23          56 LOAD_GLOBAL   2 (do_something_c)  59 CALL_FUNCTION 0  62 POP_TOP  63 JUMP_FORWARD  0 (to 66)        >>   66 LOAD_ConST    0 (None)  69 RETURN_VALUECase 2 290 LOAD_GLOBAL   0 (FUNC_MAP)   3 LOAD_FAST     0 (x)   6 BINARY_SUBSCR   7 CALL_FUNCTION 0  10 POP_TOP  11 LOAD_ConST    0 (None)  14 RETURN_VALUE

…因此,很容易看出哪个函数必须执行最多的指令。

至于哪个实际上更快,那是您必须通过分析代码来检查的事情。



欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5646236.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存