在 Lambda 中捕获值而不是引用 [重复]

2023-11-23

我对 Eli Bendersky 给出的这个例子感到有点惊讶(http://eli.thegreenplace.net/2015/the-scope-of-index-variables-in-pythons-for-loops/)

>>> def foo():
...     lst = []
...     for i in range(4):
...         lst.append(lambda: i)
...     print([f() for f in lst])
...
>>> foo()
[3, 3, 3, 3]

但当我想到这一点时,它是有道理的——lambda 捕获的是对 i 的引用,而不是 i 的值。

因此,解决这个问题的方法如下:

>>> def foo():
...     lst = []
...     for i in range(4):
...         lst.append((lambda a: lambda: a)(i))
...     print([f() for f in lst])
...
>>> foo()
[0, 1, 2, 3]

看起来这个有效的原因是,当 i 被提供给外部 lambda 时,外部 lambda 会创建一个范围并取消引用 i,将 a 设置为 i。然后,返回的内部 lambda 保存对 a 的引用。

这是正确的解释吗?


默认参数是捕获值的另一种方法:

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

在 Lambda 中捕获值而不是引用 [重复] 的相关文章

  • sklearn DeprecationWarning 数组的真值

    从文档中运行 rasa core 示例 python3 m rasa core run d models dialogue u models nlu default current 并在对话框中的每条消息后获取此错误输出 sklearn D
  • 只使用 Django 的某些部分?

    我喜欢 Django 但对于一个特定的应用程序 我只想使用它的一部分 但我对 Django 的内部工作原理还不够熟悉 所以也许有人可以指出我必须做什么的正确方向查看 具体来说 我想使用 模型和数据库抽象 The 缓存API http doc
  • 如何将本机 popcount 与 numba 一起使用

    我正在使用 numba 0 57 1 我想在我的代码中利用本机 CPU popcount 我现有的代码太慢 因为我需要运行它数亿次 这是一个 MWE import numba as nb nb njit nb uint64 nb uint6
  • 如何修复 Apache mod_wsgi 的 Python 版本不匹配问题?

    我收到此错误 Thu Jul 12 14 31 36 2012 error python init Python version mismatch expected 2 6 7 found 2 6 8 当尝试启动 Apache 服务器时 在
  • Pandas 字符串提取所有匹配项

    我正在学习 pandas 系列字符串方法中的正则表达式操作 我能够从字符串中提取第一个数字 但我的正则表达式与第二个数字不匹配 如何捕获这两个数字 注意第二行 第二个元素在这里是 NAN CODE import pandas as pd d
  • 如何使用 django (python) 和 s3 上传文件?

    我正在寻找一种将文件上传到 s3 的方法 我正在使用 django 我目前正在使用亚马逊的 python 库进行上传以及以下代码 View def submitpicture request fuser request session lo
  • 重新索引错误没有意义

    I have DataFrames大小在 100k 到 2m 之间 我正在处理这个问题的框架是如此之大 但请注意 我必须对其他框架执行相同的操作 gt gt gt len data 357451 现在这个文件是通过编译许多文件创建的 所以它
  • 蜘蛛内的Scrapyd jobid值

    Scrapy 框架 Scrapyd 服务器 我在获取蜘蛛内部的 jobid 值时遇到一些问题 将数据发布到后http localhost 6800 schedule json http localhost 6800 schedule jso
  • Spyder 导入模块出错

    我正在尝试在 Spyder 中使用 sklearn 一开始 当我尝试导入它时 我收到 ImportError No module named sklearn 然后我用 PYTHONPATH 管理器设置 PATH 然后使用工具菜单中的 更新模
  • aws Lambda 在 S3 上传时使 CloudFront 失效

    我同时上传 10 50 个文件 Lambda 会为每个更新的文件触发一个事件 如果文件大小发生变化 因此 我不想一一失效 50x 而是想运行通配符 上传结束时出现一次字符 任何人都可以阐明如何实现这一目标 谢谢 如果我正确理解你的问题 你的
  • 如何使用 HTTP 标头发送非英语 unicode 字符串?

    我是 HTTP 相关问题的新手 我的问题是在 iOS 开发中 我想使用 HTTP 标头发送一个字符串 所以我使用 httpRequest setValue nonEnglishString forHTTPHeaderField custom
  • 使用 Pymongo 从 Windows 连接到 AWS 实例上的 MongoDB

    此行反复抛出错误 client MongoClient ec2 12 345 67 89 us east 2 compute amazonaws com 27017 ssl True ssl keyfile C mongo pem 由于显而
  • turtle.Screen().screensize() 未输出正确的屏幕尺寸[重复]

    这个问题在这里已经有答案了 我编写了一些代码来在屏幕周围随机放置点 但是 它并没有覆盖整个屏幕 import turtle import random t turtle Turtle color red green blue pink ye
  • 如何为 Python 中的应用程序设置专用屏幕区域?

    MS OneNote 就是一个很好的例子 它可以选择固定在屏幕的一侧 并将所有其他窗口推到一侧 当最大化或调整其他窗口大小时 它们只能扩展到 OneNote 的边缘 Python 使用 Tkinter 或其他模块是否具有此功能 感谢您的帮助
  • PyCharm 无法识别字典值类型

    我有一个简单的代码片段 其中我将字典值设置为空列表 new dict for i in range 1 13 new dict i 现在 如果在下一行的循环内我会输入new dict i 并添加一个点 我希望 PyCharm 向我显示可用于
  • 使 np.loadtxt 使用多个可能的分隔符

    我有一个程序可以读取数据文件 用户可以选择他们想要使用的列 我希望它对于输入文件更加通用 有时 列可能如下所示 10 34 24 58 8 284 6 121 有时它们可 能看起来像这样 10 34 24 58 8 284 6 121 我希
  • 如何加速 pandas 字符串函数?

    我正在使用 pandas 矢量化 str split 方法来提取从 上的拆分 返回的第一个元素 我还尝试使用 df apply 与 lambda 和 str split 来产生等效的结果 使用 timeit 时 我发现 df apply 的
  • Scrapy的redirect_urls异常.KeyError

    我是 Scrapy 和 Python 的新手 最近推出了我的第一个蜘蛛 有一个功能似乎以前有效 但现在它只适用于我试图废弃的一些网站 代码行是 item url direct response request meta redirect u
  • Flask 扩展未在 app.extensions 中注册

    我想访问在我的 Flask 应用程序上注册的一些扩展 我尝试使用app extensions 但我初始化的一些扩展不在字典中 from flask import current app current app extensions get
  • django admin 中内联模型的分页器

    我有这个简单的 django 模型 由一个传感器和特定传感器的值组成 每个日射强度计的值数量很多 gt 30k 是否可以以某种方式分页PyranometerValues在特定日期或一般情况下将分页器应用于管理内联视图 class Pyran

随机推荐

  • 在 Rails 中使用 UJS 时,ajax:success 和 ajax:complete 回调不起作用

    我有一个链接 当我点击它时 它会触发一个ajax调用 然后用另一个链接替换这个链接 例如原始链接是 添加朋友 当我点击这个链接时 它会向add friend操作发送一个ajax请求如果添加了朋友 上面的链接将被另一个链接 取消请求 替换 我
  • OpenMP 和 MPI 混合程序

    我有一台有 8 个处理器的机器 我想在我的代码中交替使用 OpenMP 和 MPI 如下所示 OpenMP 阶段 排名 1 7 等待 MPI Barrier 等级 0 使用所有 8 个带有 OpenMP 的处理器 MPI 阶段 等级 0 达
  • Javascript 的 setInterval 是否会阻止函数返回?

    我有一个 JavaScript 函数function a 我想每 10 秒被执行一次 我发现我可以使用setInterval这样我就可以做类似的事情 setInverval a 10000 我的问题如下 这是否意味着i 每 10 秒调用一次
  • 如何添加全局 ASP.Net Web Api 过滤器?

    我创建了一个 Web Api 过滤器 使用System Web Http Filters ActionFilterAttribute 但我无法让它在 ASP Net MVC 4 中工作 我尝试将其添加到RegisterGlobalFilte
  • 连接 postgresql 和 codeigniter

    我是 postgresql 的新手 并且已经使用 Codeigniter 一年了 我有一个小型 postgresql 数据库 我想从 Codeigniter 调用它 在我的database php 文件中我有这样的设置 active gro
  • Any、AnyVal、AnyRef、Object 之间有什么关系以及它们在 Java 代码中使用时如何映射?

    我通常会尝试每种组合直到它编译为止 有人可以解释我应该在哪里使用什么吗 我会不同意Chris s answer一方面 课程Any AnyRef and AnyVal are类 但由于 JVM 的内在限制 它们在字节码中不会显示为类 This
  • Python:matplotlib - 概率质量函数作为直方图

    我想在同一个图表上绘制直方图和线图 然而 要做到这一点 我需要将直方图作为概率质量函数 所以我想在 y 轴上有一个概率值 但是 我不知道该怎么做 因为使用normed选项没有帮助 下面是我的源代码和使用数据的预览 我将非常感谢所有的建议 d
  • 如何在运行时更改 Angular Material Datepicker 格式

    我正在研究一个Angular应用程序与Material设计 我正在使用Moment js解析和格式化日期 在我的其中一个页面中 我有一个材料的日期选择器 我遵循了材料的指南来使日期选择器与moment对象 而不是在本机上Date objec
  • 从自定义操作捕获 ArgumentTypeError 异常

    从我自己的自定义操作中抛出 ArgumentTypeError 异常并让 argparse 为我捕获它的最佳实践是什么 看来 argparse 的 try except 块不处理我的自定义操作的此异常 尽管它的内置操作做得很好 class
  • 如何从 checkout 获取 svn 版本号以在 dsl 中使用

    我创建了一个管道作业 并希望获取 svn 版本号 以便在调用 shell 脚本时启用进一步的下游处理 我正在使用类似于以下内容的管道脚本 node Mark the code checkout stage stage Checkout Ge
  • 在一个语句中打印多行,不带前导空格[重复]

    这个问题在这里已经有答案了 因此 对于我的第一个项目 它是一个简单的程序 可以打印您所在班级的姓名以及您就读的高中 让我困惑的一件事是对于其中的一个我必须使用一个print 所有这些的声明 我需要对其进行格式化 以便每条信息位于不同的行上
  • 尽管使用 DebugType=None,Visual Studio 发布仍生成 .pdb 文件

    我正在使用以下发布配置文件从 Visual Studio 中发布控制台应用程序
  • 如何使光标的高度与UITextField中文本的高度相同?

    我的 UITextField 光标太长 下图中 123123 的光标 如何让光标高度与文字高度一致 我偶然发现了这个问题 尽管它有点老了 但我还是觉得有必要回答它 因为接受的答案实际上是不正确的 您确实可以更改光标的高度 或宽度 只是子类化
  • 如何让java类线程安全?

    我有一个java类如下 class User String name String phone public String getName return name public String getPhone return phone 该类
  • 将 System.Drawing.Bitmap 转换为 stdole.StdPicture

    我当前有一个 System Drawing Bitmap 我需要将其转换为 stdole StdPicture 目前我正在使用 var pic stdole StdPicture Microsoft VisualBasic Compatib
  • 如何在 Mountain Lion 上安装 MySQLdb

    我是 Python 新手 在构建 MySQLdb 时遇到问题 试图让 Google AppEngine SDK 运行 我刚刚从 Snow Leopard 升级到 Mountain Lion 并安装了最新的 XCode 4 4 我已经下载了h
  • 无法使用 SelectListitem 获取不同的值

    我试图获取下拉列表的不同值 但是当使用以下语法时 它会带回所有行 有人可以告诉我如何使用正确的语法获取不同的值集吗 IEnumerable
  • Google 云端硬盘文档时间戳

    我假设修改日期搜索字段是修改日期 显然 或上传到驱动器的日期 有没有办法在其本机系统上保留文件的原始创建日期 或者有没有可能修改这个字段 谢谢你 肖恩 您可以使用 File Update 设置上传后的修改日期 https developer
  • Objective C - init 和构造函数之间的区别?

    我试图找到 Objective C 中 init 和构造函数之间的区别 我不是 C 开发人员 但我需要将一些 Objective C 代码转换为 Java 实际上我无法理解两者之间的区别 在 Objective C 中 对象的生成方式分为两
  • 在 Lambda 中捕获值而不是引用 [重复]

    这个问题在这里已经有答案了 我对 Eli Bendersky 给出的这个例子感到有点惊讶 http eli thegreenplace net 2015 the scope of index variables in pythons for