Python并非如此';智能&x27;用于冗余操作 不像C++的许多情况,Python显然不是优化冗余操作的智能,即使在常数之间也不聪明。

Python并非如此';智能&x27;用于冗余操作 不像C++的许多情况,Python显然不是优化冗余操作的智能,即使在常数之间也不聪明。,python,python-3.x,performance,caching,optimization,Python,Python 3.x,Performance,Caching,Optimization,我做了一个简单的基准测试来测试math.cos的循环内外 在第一种情况下,我使用Python计算cos(3)1000万次: from datetime import * from math import * ini = datetime.now() for a in range(10000000): x = cos(0) fim = datetime.now() print(fim - ini) 结果大约是0:00:01.360958 现在,只需将x=cos(0)替换为x=1(或者

我做了一个简单的基准测试来测试math.cos的循环内外

在第一种情况下,我使用Python计算cos(3)1000万次:

from datetime import *
from math import *

ini = datetime.now()
for a in range(10000000):
    x = cos(0) 
fim = datetime.now()
print(fim - ini)
结果大约是
0:00:01.360958

现在,只需将
x=cos(0)
替换为
x=1
(或者只需将
cos(0)
放入循环外的变量中),时间大约快3倍
0:00:00.429995

现在,如果
cos(0)
操作总是生成一个常量(1),为什么Python不使用缓存优化执行,从而避免不断重复相同的
cos
操作


Python的哲学之一是使程序员的生活更轻松。但在这种情况下,情况恰恰相反。

因为你必须自己编程。这就是C++的创建者在他说的“高级语言”时的意思。(不,说真的,它总是在一开始就存在。)我不认为Python是为了让程序员的生活更轻松,而是要比更高级的语言“便宜”

你指的是什么?Python中没有“常量”这样的东西;一切都是动态的。因此,任何Python都无法优化那些不起作用的重复循环。因为可能会有另一个线程出现,并将其他内容分配给
cos
全局,这些内容具有副作用,或者每次都返回一个随机值。因为不能缓存所有内容?如果你需要重复1s来存储它们,并且重用存储的值,如果任何C++实现都使用了一个缓存,用于<代码> COS,我会非常惊讶。我希望它在编译时要么被不断折叠,要么在运行时每次计算(如果循环没有完全得到优化)。Python太过动态,在字节码编译时,这两种优化都无效。请尝试在其上打上一个标记,然后观察它的效果。缓存不是免费的。不是“按说”而是。你的意思是。解析-A?