将局部变量设置为函数而不是使用全局变量来优化函数

2023-12-12

在 itertools 模块的文档中我发现了这个评论

def dotproduct(vec1, vec2):
    return sum(imap(operator.mul, vec1, vec2))

请注意,上述许多配方可以通过替换全局来优化 使用定义为默认值的局部变量进行查找。例如, 点积配方可以写成:

def dotproduct(vec1, vec2, sum=sum, imap=imap, mul=operator.mul):
    return sum(imap(mul, vec1, vec2))

如何?。
是否有实际的显着加速(可以平衡较大函数签名的不便)?
在哪种特定条件下,在所示的情况下使用局部变量是相关的?

Edit:我用 timeit 进行了测试,有任何相关的差异。
对于两个 40 项列表作为 vec1、vec2:

全局查找 -> 3.22720959404
本地查找 -> 3.19884065683

也就是说,只有大约。 1% 的增益。


是否有实际的显着加速(可以平衡较大函数签名的不便)?

我非常怀疑这一点,因为在原始定义中每个查找都发生一次。请注意,您已经更改了该函数的含义。

在所示的情况下,在哪些特定条件下使用局部变量是相关的?

仅在紧密循环内;在这种情况下,如果dot_product例如,用于非常大的矩阵乘法(无论如何你都不会在纯Python中执行此操作,更不用说使用迭代器了)。

EDIT:我刚刚反汇编了这两个函数,我的预感是错误的,尽管我的观点仍然成立:

>>> def dotproduct(vec1, vec2):
...     return sum(imap(operator.mul, vec1, vec2))
...
>>> dis.dis(dotproduct)
  2           0 LOAD_GLOBAL              0 (sum)
              3 LOAD_GLOBAL              1 (imap)
              6 LOAD_GLOBAL              2 (operator)
              9 LOAD_ATTR                3 (mul)
             12 LOAD_FAST                0 (vec1)
             15 LOAD_FAST                1 (vec2)
             18 CALL_FUNCTION            3
             21 CALL_FUNCTION            1
             24 RETURN_VALUE
>>> def dotproduct(vec1, vec2, sum=sum, imap=imap, mul=operator.mul):
...     return sum(imap(mul, vec1, vec2))
...
>>> dis.dis(dotproduct)
  2           0 LOAD_FAST                2 (sum)
              3 LOAD_FAST                3 (imap)
              6 LOAD_FAST                4 (mul)
              9 LOAD_FAST                0 (vec1)
             12 LOAD_FAST                1 (vec2)
             15 CALL_FUNCTION            3
             18 CALL_FUNCTION            1
             21 RETURN_VALUE
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将局部变量设置为函数而不是使用全局变量来优化函数 的相关文章

  • 如何在python中读取多个文件中的文本

    我的文件夹中有许多文本文件 大约有 3000 个文件 每个文件中第 193 行是唯一包含重要信息的行 我如何使用 python 将所有这些文件读入 1 个文本文件 os 模块中有一个名为 list dir 的函数 该函数返回给定目录中所有文
  • 如何使用包含代码的“asyncio.sleep()”进行单元测试?

    我在编写 asyncio sleep 包含的单元测试时遇到问题 我要等待实际的睡眠时间吗 I used freezegun到嘲笑时间 当我尝试使用普通可调用对象运行测试时 这个库非常有用 但我找不到运行包含 asyncio sleep 的测
  • 如何等到 Excel 计算公式后再继续 win32com

    我有一个 win32com Python 脚本 它将多个 Excel 文件合并到电子表格中并将其另存为 PDF 现在的工作原理是输出几乎都是 NAME 因为文件是在计算 Excel 文件内容之前输出的 这可能需要一分钟 如何强制工作簿计算值
  • 为 pandas 数据透视表中的每个值列定义 aggfunc

    试图生成具有多个 值 列的数据透视表 我知道我可以使用 aggfunc 按照我想要的方式聚合值 但是如果我不想对两列求和或求平均值 而是想要一列的总和 同时求另一列的平均值 该怎么办 那么使用 pandas 可以做到这一点吗 df pd D
  • 在循环中每次迭代开始时将变量重新分配给原始值(在循环之前定义)

    在Python中 你使用 在每次迭代开始时将变量重新分配给原始值 在循环之前定义 时 也就是说 original 1D o o o for i in range 0 3 new original 1D revert back to orig
  • Python 中的二进制缓冲区

    在Python中你可以使用StringIO https docs python org library struct html用于字符数据的类似文件的缓冲区 内存映射文件 https docs python org library mmap
  • Abaqus 将曲面转化为集合

    我一直试图在模型中找到两个表面的中心 参见照片 但未能成功 它们是元素表面 面 查询中没有选项可以查找元素表面的中心 只能查找元素集的中心 找到节点集的中心也很好 但是我的节点集没有出现在工具 gt 查询 gt 质量属性选项中 而且我找不到
  • 当玩家触摸屏幕一侧时,如何让 pygame 发出警告?

    我使用 pygame 创建了一个游戏 当玩家触摸屏幕一侧时 我想让 pygame 给出类似 你不能触摸屏幕两侧 的错误 我尝试在互联网上搜索 但没有找到任何好的结果 我想过在屏幕外添加一个方块 当玩家触摸该方块时 它会发出警告 但这花了很长
  • Geopandas 设置几何图形:MultiPolygon“等于 len 键和值”的 ValueError

    我有 2 个带有几何列的地理数据框 我将一些几何图形从 1 个复制到另一个 这对于多边形效果很好 但对于任何 有效 多多边形都会返回 ValueError 请指教如何解决这个问题 我不知道是否 如何 为什么应该更改 MultiPolygon
  • 如何将 numpy.matrix 提高到非整数幂?

    The 运算符为numpy matrix不支持非整数幂 gt gt gt m matrix 1 0 0 5 0 5 gt gt gt m 2 5 TypeError exponent must be an integer 我想要的是 oct
  • ExpectedFailure 被计为错误而不是通过

    我在用着expectedFailure因为有一个我想记录的错误 我现在无法修复 但想将来再回来解决 我的理解expectedFailure是它会将测试计为通过 但在摘要中表示预期失败的数量为 x 类似于它如何处理跳过的 tets 但是 当我
  • Nuitka 未使用 nuitka --recurse-all hello.py [错误] 编译 exe

    我正在尝试通过 nuitka 创建一个简单的 exe 这样我就可以在我的笔记本电脑上运行它 而无需安装 Python 我在 Windows 10 上并使用 Anaconda Python 3 我输入 nuitka recurse all h
  • Python:计算字典的重复值

    我有一本字典如下 dictA unit1 test1 alpha unit1 test2 beta unit2 test1 alpha unit2 test2 gamma unit3 test1 delta unit3 test2 gamm
  • 检查所有值是否作为字典中的键存在

    我有一个值列表和一本字典 我想确保列表中的每个值都作为字典中的键存在 目前我正在使用两组来确定字典中是否存在任何值 unmapped set foo set bar keys 有没有更Pythonic的方法来测试这个 感觉有点像黑客 您的方
  • 如何从没有结尾的管道中读取 python 中的 stdin

    当管道来自 打开 时 不知道正确的名称 我无法从 python 中的标准输入或管道读取数据 文件 我有作为例子管道测试 py import sys import time k 0 try for line in sys stdin k k
  • glpk.LPX 向后兼容性?

    较新版本的glpk没有LPXapi 旧包需要它 我如何使用旧包 例如COBRA http opencobra sourceforge net openCOBRA Welcome html 与较新版本的glpk 注意COBRA适用于 MATL
  • 用于运行可执行文件的python多线程进程

    我正在尝试将一个在 Windows 上运行可执行文件并管理文本输出文件的 python 脚本升级到使用多线程进程的版本 以便我可以利用多个核心 我有四个独立版本的可执行文件 每个线程都知道要访问它们 这部分工作正常 我遇到问题的地方是当它们
  • 对输入求 Keras 模型的导数返回全零

    所以我有一个 Keras 模型 我想将模型的梯度应用于其输入 这就是我所做的 import tensorflow as tf from keras models import Sequential from keras layers imp
  • Python - 字典和列表相交

    给定以下数据结构 找出这两种数据结构共有的交集键的最有效方法是什么 dict1 2A 3A 4B list1 2A 4B Expected output 2A 4B 如果这也能产生更快的输出 我可以将列表 不是 dict1 组织到任何其他数
  • 改变字典的哈希函数

    按照此question https stackoverflow com questions 37100390 towards understanding dictionaries 我们知道两个不同的字典 dict 1 and dict 2例

随机推荐

  • 如何向双向绑定对象添加侦听器

    我试图将 TextArea 的textProperty 绑定到控制器的initialize 方法中的StringProperty 它们都被监听器监听 在值改变时执行一些行为 但奇怪的事情发生了 我建立了一个简单的模型来重现这种情况 主程序
  • Hadoop 任务:“execvp:权限被拒绝”

    在多个开发人员工作站 即它们具有不同的本地配置 上设置的小型 Hadoop 集群中 我有一个 6 个 TaskTracker 出现问题 每当它收到任务时 该任务立即失败并显示ChildError java lang Throwable Ch
  • 为 iPhone / iPad 编写单元测试的最佳方法是什么?

    我正在开发一个 iPad 应用程序 我不确定是否应该为此应用程序编写单元测试 如果是 我应该如何编写它们 您建议为 iPhone iPad 编写单元测试的最佳方法是什么 好的 这里有两个问题被提出 单元测试值得吗 答 当然可以 我数不清有多
  • 检查用户输入的数组是否太长?

    我让用户输入 4 个数字 它们可以输入 1 2 3 4 或 1234 或 1 2 34 等 我目前正在使用 int array 4 scanf 1x 1x 1x 1x array 0 array 1 array 2 array 3 但是 如
  • HTML 的 PHP SAX 解析器?

    我需要 PHP 的 HTML SAX 不是 DOM 解析器 甚至能够处理无效的 HTML 代码 我需要它的原因是过滤用户输入的 HTML 删除所有属性和标签 允许的除外 并将 HTML 内容截断为指定长度 有任何想法吗 SAX 旨在处理有效
  • 避免 R 函数粘贴为引号生成反斜杠

    我正在尝试获取两个包含引号 的字符串 它们组合为字符 字符串向量或与 R 函数粘贴 以便我可以将结果插入 writeFormula 的参数 x 中openxlsx包裹 一个例子是这样的 paste HYPERLINK file path C
  • 从 Android 中的两个不同活动访问已启动服务的结果

    我有一项服务可以获取用户的位置并以意图广播纬度和经度 我相信我需要该服务成为启动服务 而不是绑定服务 因为我希望它能够在来自 firebase 的新 geoFire 条目进入其半径时向用户发送推送通知 即使应用程序已关闭 目前 该服务已设置
  • MYSQL 如何解锁表,如果我使用命令 LOCK table table_name WRITE;

    这是我的第一个问题 所以请耐心等待 我用过这个命令 LOCK table table name WRITE 在 mysql 工作台中锁定任何向该表添加行的新人 我无法 解锁 这张桌子 例如 每当我尝试输入不同的命令时 select from
  • 严重:缺少字段依赖项:private org.glassfish.jersey.server.wadl.WadlApplicationContext

    谁能帮我 我正在尝试使用 JAX RS 创建一个 Web 服务 但它给了我这个例外 SEVERE Missing dependency for field private org glassfish jersey server wadl W
  • ASP Web API 帮助页面 - 其他页面的链接

    我正在使用 Web API 帮助页面 并且希望能够包含其他方法的链接 我已经看到从Web API 2 帮助页面是否不处理 XML 文档标签 不支持使用 有没有比在文档中编写我自己的 链接并使用中描述的方法更好的选择Web Api 帮助页面
  • 没有主键列的数据表合并

    如何合并目标表包含主键列而源表不包含的表 DataSet enforceConstraints 设置为 false 然后它将合并表 但是当在目标表上执行 GetChanges 时 会发生异常 Dest table contains prim
  • 将一些标签放入

    这是我的代码
  • 哈希映射、哈希集、哈希字典有什么区别?

    有人可以解释一下以下结构之间的区别 Hash Map 哈希表 哈希集 以及 哈希字典 HashMap HashTable 和 HashDictionary 都是字典 将唯一的无序键映射到相应的值 使用哈希码实现 HashSet 表示唯一的
  • 触发对同一个表的 UPDATE 和 SELECT - 错误 1235 (42000)

    我正在尝试实施具有多个递增列的表 不会重用已删除的列值 这篇文章被标记为已经被回答MYSQL表的子集内如何自动递增但是 引用的帖子不符合规定的要求 因为它允许子集增量键被复制 在第一篇文章中 给出了评论 创建一个表来存储每种类型的最后 AI
  • 如何创建带有图标的 C++ 按钮

    我正在尝试制作一个自定义退出按钮 并且我已经在 Photoshop 中为该按钮创建了一个自定义图形 我有此代码定义的按钮 button CreateWindow L BUTTON L WS VISIBLE WS CHILDWINDOW 40
  • iOS 使用 UIActivityViewController 将 GIF 分享到 Messenger

    我正在尝试使用共享不同类型的图像UIActivityViewController到 Facebook Messenger 我在共享图像 png 时没有遇到任何问题 但我无法发送 gif 图像 gif 它给出错误 无法加载内容 我将图像转换为
  • 在 C# 中解析用引号引起来的 CSV 文件

    我见过很多解析 CSV 文件的示例 但这是一种烦人的文件 那么如何解析这种 CSV 1 1 2 2010 样本 adasdad asdada 我在门上大便 臭 所以我该死 AK 在大多数情况下 最好的答案可能是 Jim Mischel 的
  • 如何比较两个列表中的项目 Python 3.3

    我尝试使用cmp list1 list2 了解 Python 3 3 不再支持它 我尝试过许多其他复杂的方法 但没有一个有效 我有两个列表 其中都只包含单词 我希望它检查两个列表中有多少单词 并返回有多少单词 您可以使用以下方法找到集合交集
  • SVN 提交期间互联网连接断开

    在对远程 SVN 存储库进行大量提交期间 如果互联网连接断开 我是否必须再次开始提交 或者它会从中断的地方 继续 吗 Thanks Ojo Subversion 提交是一个原子事务 要么一切都承诺 要么什么都不承诺 您必须再次开始提交
  • 将局部变量设置为函数而不是使用全局变量来优化函数

    在 itertools 模块的文档中我发现了这个评论 def dotproduct vec1 vec2 return sum imap operator mul vec1 vec2 请注意 上述许多配方可以通过替换全局来优化 使用定义为默认