Wayne Werner..
16
如果您使用该dis模块,您可以开始了解原因:
In [11]: dis.dis(add_simple)
2 0 SETUP_LOOP 26 (to 29)
3 LOAD_GLOBAL 0 (range)
6 LOAD_CONST 1 (1000)
9 CALL_FUNCTION 1 (1 positional, 0 keyword pair)
12 GET_ITER
>> 13 FOR_ITER 12 (to 28)
16 STORE_FAST 0 (i)
3 19 LOAD_CONST 4 (1.0)
22 STORE_FAST 1 (a)
25 JUMP_ABSOLUTE 13
>> 28 POP_BLOCK
>> 29 LOAD_CONST 0 (None)
32 RETURN_VALUE
In [12]: dis.dis(cast_simple)
2 0 SETUP_LOOP 32 (to 35)
3 LOAD_GLOBAL 0 (range)
6 LOAD_CONST 1 (1000)
9 CALL_FUNCTION 1 (1 positional, 0 keyword pair)
12 GET_ITER
>> 13 FOR_ITER 18 (to 34)
16 STORE_FAST 0 (i)
3 19 LOAD_GLOBAL 1 (float)
22 LOAD_CONST 2 (1)
25 CALL_FUNCTION 1 (1 positional, 0 keyword pair)
28 STORE_FAST 1 (a)
31 JUMP_ABSOLUTE 13
>> 34 POP_BLOCK
>> 35 LOAD_CONST 0 (None)
38 RETURN_VALUE
请注意 CALL_FUNCTION
Python中的函数调用(相对)很慢.和.查找一样.因为强制转换float需要函数调用 - 这就是它变慢的原因.
根据你的问题 - 这些操作之间的差异介于"0.0001220703125"和"0.000469923019409"之间.这意味着无论您选择哪个选项,您都会看到非常小的*成本.如果你碰巧描述你的代码并且看到你称为浮动(数字)`十亿次,并且你试图让它更快,因为*直接*意味着更多的钱,那么它可能值得使用` + 0.0`,但是否则你试图记住为什么你做`+ 0.0`的可读性问题比调用`float()`函数要贵得多. (16认同)
这只是故事的一部分.导致性能差异的主要因素有3个:常量折叠,内置查找和函数调用开销.这个答案只提到函数调用开销. (2认同)