如果找到零,Python乘法表达式的计算速度会更快吗?

2023-11-27

假设我有一个有很多被乘数的乘法表达式(小表达式)

expression = a*b*c*d*....*w   

例如,c 为 (x-1),d 为 (y**2-16),k 为 (xy-60)..... x,y 是数字
我知道 c,d,k,j 可能为零
我编写表达式的顺序对于更快的评估是否重要?
是不是写c比较好
dkj....*w 或 python 将计算所有表达式,无论我写的顺序如何?


Python v2.6.5 不检查零值。

def foo():
    a = 1
    b = 2
    c = 0
    return a * b * c

>>> import dis
>>> dis.dis(foo)
  2           0 LOAD_CONST               1 (1)
              3 STORE_FAST               0 (a)

  3           6 LOAD_CONST               2 (2)
              9 STORE_FAST               1 (b)

  4          12 LOAD_CONST               3 (3)
             15 STORE_FAST               2 (c)

  5          18 LOAD_FAST                0 (a)
             21 LOAD_FAST                1 (b)
             24 BINARY_MULTIPLY     
             25 LOAD_FAST                2 (c)
             28 BINARY_MULTIPLY     
             29 RETURN_VALUE        

Update:我测试过Baldur的表达式,Python 可以并且将会优化涉及常量表达式的代码。这weird就是它test6没有优化。

def test1():
    return 0 * 1

def test2():
    a = 1
    return 0 * a * 1

def test3():
    return 243*(5539**35)*0

def test4():
    return 0*243*(5539**35)

def test5():
    return (256**256)*0

def test6():
    return 0*(256**256)

>>> dis.dis(test1) # 0 * 1
  2           0 LOAD_CONST               3 (0)
              3 RETURN_VALUE       

>>> dis.dis(test2) # 0 * a * 1
  5           0 LOAD_CONST               1 (1)
              3 STORE_FAST               0 (a)

  6           6 LOAD_CONST               2 (0)
              9 LOAD_FAST                0 (a)
             12 BINARY_MULTIPLY     
             13 LOAD_CONST               1 (1)
             16 BINARY_MULTIPLY     
             17 RETURN_VALUE        

>>> dis.dis(test3) # 243*(5539**35)*0
  9           0 LOAD_CONST               1 (243)
              3 LOAD_CONST               5 (104736434394484...681759461305771899L)
              6 BINARY_MULTIPLY     
              7 LOAD_CONST               4 (0)
             10 BINARY_MULTIPLY     
             11 RETURN_VALUE        

>>> dis.dis(test4) # 0*243*(5539**35)
 12           0 LOAD_CONST               5 (0)
              3 LOAD_CONST               6 (104736433252667...001759461305771899L)
              6 BINARY_MULTIPLY     
              7 RETURN_VALUE        

>>> dis.dis(test5) # (256**256)*0
 15           0 LOAD_CONST               4 (0L)
              3 RETURN_VALUE        

>>> dis.dis(test6) # 0*(256**256)
 18           0 LOAD_CONST               1 (0)
              3 LOAD_CONST               3 (323170060713110...853611059596230656L)
              6 BINARY_MULTIPLY     
              7 RETURN_VALUE        

简而言之,如果表达式包含变量,则顺序并不重要。一切都会被评估。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如果找到零,Python乘法表达式的计算速度会更快吗? 的相关文章

随机推荐

  • 表格列大小调整

    In Bootstrap 3 我可以申请col sm xx to the th中的标签thead并随意调整表格列的大小 然而这在 bootstrap 4 中不起作用 我怎样才能在 bootstrap 4 中实现类似的功能 thead th
  • 在 Visual Studio Code 中调试 MSTest 单元测试

    我正在尝试使用 Visual Studio Code 调试 MSTest 单元测试项目 但测试只是运行并且从未到达断点 这是我的 launch json version 0 2 0 configurations name NET Core
  • Maven:“读取原型目录时出错”,不在代理后面

    Command mvn archetype generate DarchetypeArtifactId maven archetype quickstart DinteractiveMode false DgroupId org apach
  • 返回 MySQL 查询的第 n 条记录

    我希望从 MySQL 查询返回第二条 第三条或第四条记录 基于按 ID 升序的查询 问题是 我不知道 ID 只知道它是查询中的第三行 SELECT FROM table ORDER BY ID LIMIT n 1 1 它表示返回从记录 n
  • 使用 babel 和 laravel-mix 将 ES6 转换为 ES2015

    我的 Vue 组件中有 ES6 JavaScript 代码 为了支持 IE 11 我需要使用 babel 和 laravel mix 将其转换为 ES5 代码 我怎么做 这是我的 webpack mix js 文件 let mix requ
  • 正则表达式:匹配空格之间的单词

    我试图用 python 中的正则表达式做一些相当简单的事情 至少我是这么想的 我想要做的是匹配字符串中的单词 如果它前面和后面都有空格 如果它位于字符串的开头 则之前不需要空格 如果它位于末尾 则也不搜索空格 Example WordA W
  • verilog模块中的reg和wire有什么区别?

    在verilog模块中我们什么时候应该使用reg以及什么时候应该使用wire 我还注意到有时输出会再次声明为 reg 例如 D 触发器中的 reg Q 我在某处读过这个 过程赋值语句的目标输出必须是 reg 数据类型 什么是程序赋值语句 我
  • r 根据值(不是行数或日期/时间变量)计算滚动平均值

    我对 R 中用于计算滚动平均值的所有软件包都很陌生 我希望你能给我指明正确的方向 我有以下数据作为示例 ms lt c 300 300 300 301 303 305 305 306 308 310 310 311 312 314 315
  • 点击标签不会触发点击事件

    我有这个代码
  • 在 @Html.ActionLink mvc asp.net 中插入 Glyphicons bootstrap

    将在下面的代码中输入 Glyphicons Bootstrap 而不是 编辑 你能给我举个例子吗 Html ActionLink Edit Edit new id Model id rod 提出图像而 不是文字 如果使用 Bootstrap
  • 如何将字符串转换为pdf?

    目前我正在 asp net c 中使用 Restful 服务 以下是pdf我得到的字符串返回 我想将其转换并将其另存为 pdf文件 我该怎么做呢 static string HttpGet string url HttpWebRequest
  • 如何将 MultiDict 转换为嵌套字典

    我想转换来自 Webob 的 POST多字典到嵌套字典 例如 因此 来自以下帖子 name Kyle phone number 1234 phone type home phone number 5678 phone type work 到
  • 在 Cakephp 2+ Shell 中使用组件

    我正在尝试使用 cakephp shell 为我的应用程序实现一项任务 该任务涉及运行一个长时间运行的进程 因此需要使用 shell 该函数要求我使用名为 CommonComponent 的组件内的函数 不幸的是 每当我尝试包含该组件时 我
  • 如何从另一个 .py 文件调用函数? [复制]

    这个问题在这里已经有答案了 file py包含一个名为的函数function 我如何导入它 from file py import function a b 上面给出了一个错误 导入错误 没有名为 file py 的模块 文件不是一个包 一
  • 从另一个脚本运行 PowerShell 脚本

    从另一个 PowerShell 脚本运行 PowerShell 脚本的最佳且正确的方法是什么 我有一个脚本 a ps1 我想从中调用 b ps1 来执行不同的任务 让我知道您的建议 点采购是这里的最佳选择吗 点采购将运行第二个脚本 就好像它
  • 如何在 Eclipse FormEditor 中实现撤消/重做功能?

    我正在开发一个多页表单编辑器来在 Eclipse 中编辑 创建自定义 XML 文件 实现类是MyXMLFormEditor 它扩展了FormEditor FormEditor 的每个页面都扩展了 FormPage 即 MyXMLFormPa
  • “未分配被释放的指针。” malloc、realloc后出错

    我有以下代码的错误 int main point points malloc sizeof point if points NULL printf Memory allocation failed n return 1 other stuf
  • 如何在 Android 中创建自定义控件?

    我想在我的 Android 应用程序中创建一个自定义控件 它将是一个圆形控件 带有一些较小的可移动圆圈 用于指示特定值 有没有办法实现这一点 至少有一些不错的教程可以让我阅读如何创建自定义控件吗 看看定制组件Android 开发指南部分 通
  • 如何从变量运行生成的 SQL?

    我尝试运行我的 SQL 在 T SQL 中 我刚刚生成了一个变量 但我无法让它运行 我想做的是 1 从程序运行大SQL 2 Big SQL生成select SQL 3 像正常选择一样运行生成的sql并像正常一样接收数据 我认为这可以完成sp
  • 如果找到零,Python乘法表达式的计算速度会更快吗?

    假设我有一个有很多被乘数的乘法表达式 小表达式 expression a b c d w 例如 c 为 x 1 d 为 y 2 16 k 为 xy 60 x y 是数字我知道 c d k j 可能为零我编写表达式的顺序对于更快的评估是否重要