我对 Python 和 IronPython 比较陌生。我对我编写的相对简单的代码的性能(应该说缓慢)感到惊讶:matrix_column_count=1000matrix_row_count=2000matrix=[[random.uniform(0,100) for i in range(matrix_column_count)] for j in range(matrix_row_count)]在 IronPython 2.7.10 上运行它大约需要 1 秒(有一些小的变化)!在 Python 3.8.6 上运行需要 0.55 秒 在 C# 中运行类似的东西需要 0.03 秒!这些数字对于 Python 开发与 C# 开发来说是“正常”的还是我做错了什么?
1 回答
慕姐8265434
TA贡献1813条经验 获得超2个赞
是的,这些数字是正确的。由于我无法发表评论(没有足够的堆栈溢出点),所以我将从堆栈溢出复制粘贴另一个类似的答案
答案很简单,Python 处理所有事情的对象,并且默认情况下它没有 JIT。因此,Python 并没有通过修改堆栈上的几个字节并优化代码的热点部分(即迭代)来提高效率,而是随着表示数字的丰富对象一起运行,并且没有即时优化。
如果您在具有 JIT 的 Python 变体(例如 PyPy)中尝试过此操作,我向您保证您会看到巨大的差异。
一般提示是避免使用标准 Python 进行计算成本非常高的操作(特别是如果这是用于服务来自多个客户端的请求的后端)。Java、C#、JavaScript 等使用 JIT 的效率是无与伦比的。
添加回答
举报
0/150
提交
取消