python - 对于冗余操作,Python 不是那么“聪明”
问题描述
与 c++ 的许多情况不同,Python 显然在优化冗余操作方面并不聪明,即使在常量之间也是如此。
我做了一个简单的基准测试来测试 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 - ModuleNotFoundError:没有名为 msg1 的模块(在带有 python 2.7.6 的 ubuntu 中没有显示任何错误)
- c# - .netcore EF linq - 这是一个错误吗?非常奇怪的行为
- ibm-cloud - Node-Red 应用程序再次询问“欢迎使用您的新 Node-RED 实例”
- javascript - TYPO3 前端:未找到表单操作结果页面
- java - 如何参考 TestNG 从 POM.XML 运行特定的 Java 类
- debugging - NuGet/MyGet 调试抛出未找到源代码错误
- sql - 每组记录只显示一次值
- git - 从现有的 Git 存储库中进行稀疏签出?
- jquery - 选择所有在 webgrid Jquery 和 ASP.net MVC 中不起作用的复选框
- jenkins - 无法启动 Windows 从代理 (Jenkins)