for循环中的lambda仅取最后一个值[重复]

2023-11-22

我有代码

options=["INFO", "WARNING", "DEBUG"]

for i in range(len(options)):
    option=options[i]
    __cMenu.add_command(
        label="{}".format(option), 
        command=lambda: self.filter_records(column, option)
   )

它创建并保存几个应该捕获局部变量的不同值的 lambdaoption。然而,当使用这些 lambda 表达式时,它们的行为就像options被设置为"DEBUG",它在循环中采用的最后一个值。

我猜这与垃圾收集有关,因为只剩下最后一个选项,但我不知道如何避免这种情况。


请阅读有关最小的例子。在不阅读您的代码的情况下,我相信您已经遇到了之前的问题和答案中解决的一个众所周知的问题,需要两行来说明。函数体中的名称在函数执行时进行评估。

funcs = [lambda: i for i in range(3)]
for f in funcs: print(f())

打印 '2' 3 次,因为这 3 个函数是相同的,并且每个函数中的 'i' 直到调用(当 i == 2 时)才会计算。但是,

funcs = [lambda i=i:i for i in range(3)]
for f in funcs: print(f())

创建三个不同的函数,每个函数都有不同的捕获值,因此会打印 0、1 和 2。在你的声明中

__cMenu.add_command(label="{}".format(option),
    command=lambda: self.filter_records(column, option))

add option=option before :捕捉不同的值option。你可能想重写为

lambda opt=option: self.filter_records(column, opt)

区分循环变量和函数参数。如果column在循环内改变,则需要相同的处理。

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

for循环中的lambda仅取最后一个值[重复] 的相关文章

  • “扩展”numpy ndarray 的好方法?

    有没有 扩展 numpy ndarray 的好方法 假设我有一个像这样的 ndarray 1 2 3 4 我希望每行通过填充零来包含更多元素 1 2 0 0 0 3 4 0 0 0 我知道一定有一些蛮力的方法可以做到这一点 比如构造一个带有
  • Tastypie 与 application/x-www-form-urlencoded

    我有点难以弄清楚下一步应该做什么 我正在使用 tastypie 为我的 Web 应用程序创建 API 从另一个应用程序 特别是 ifbyphone com 我收到一个没有标题的 POST 如下所示 post data http myapp
  • 如何在 Python 中使用 .format() 打印“for”循环中的列表?

    我是 Python 新手 我正在编写一段非常简单的代码 使用 for 循环打印列表的内容 format 我想要如下的输出 但我收到此错误 names David Peter Michael John Bob for i in names p
  • 如何在 Django Admin 的“更改”页面中显示内嵌上传的图像?

    我正在尝试在中显示内联上传的图像 变更列表 页面在 Django 管理中 这是我的代码如下 models py from django db import models class Product models Model name mod
  • PyQt4 信号和槽

    我正在使用 PyQt4 编写我的第一个 Python 应用程序 我有一个 MainWindow 和一个 Dialog 类 它是 MainWindow 类的一部分 self loginDialog LoginDialog 我使用插槽和信号 这
  • 使用 for 循环 Python 为数组赋值

    我正在尝试将字符串的值分配给不同的数组索引 但我收到一个名为 列表分配超出范围 的错误 uuidVal distVal uuidArray distArray for i in range len returnedList for beac
  • 尽管 ioff() 和 matplotlib.use('Agg'),Pyplot“无法连接到 X 服务器 localhost:10.0”

    我有一段代码 它被不同的函数调用 为我执行一些计算 然后将输出绘制到文件中 鉴于整个脚本可能需要一段时间才能运行更大的数据集 并且由于我可能想在给定时间分析多个数据集 所以我开始它screen然后断开连接并关闭我的腻子会话 并在第二天再检查
  • SQLAlchemy 默认日期时间

    这是我的声明模型 import datetime from sqlalchemy import Column Integer DateTime from sqlalchemy ext declarative import declarati
  • Python控制台默认十六进制显示

    我在 Python 控制台中做了很多工作 其中大部分都涉及地址 我更喜欢以十六进制形式查看地址 So if a 0xBADF00D 当我简单地输入Python gt a进入控制台查看其值 我更喜欢 python 回复0xBADF00D代替1
  • Tensorflow 到 ONNX 的转换

    我目前正在尝试转换我使用本教程创建的已保存 且正在工作 的 pb 文件 https github com thtrieu darkflow https github com thtrieu darkflow 到 onnx 文件中 我目前正在
  • Python:动态向对象添加字段

    我想知道是否可以动态向对象添加字段 例如 我希望能够添加如下内容 user object user first name John user last name Smith 当我在 Python 命令行解释器中执行该命令时 我得到 Attr
  • 使用 shell=True 将 PATH 设置为 bitbake 的“source”在 Python 中没有效果

    下面是shell脚本中的代码 source proj common tools repo etc profile d repo sh repo project init branch repo project sync source pok
  • PyCharm 输出错误消息散布在控制台输出中。如何解决这个问题?

    我正在运行 PyCharm 社区版 4 0 4 有谁知道为什么控制台输出后不显示错误消息 Thanks C Python27 python exe F Google Drive code python scripts leetcode lc
  • python 中的异步编程

    python 中有异步编程的通用概念吗 我可以为一个函数分配一个回调 执行它并立即返回主程序流 无论该函数的执行需要多长时间吗 您所描述的 主程序流程在另一个函数执行时立即恢复 不是通常所说的 异步 又名 事件驱动 编程 而是 多任务 又名
  • 找到图像特征宽度的正确方法和Python包

    输入是一个在黑色背景上带有彩色 抱歉 垂直线的光谱 给定该带的近似 x 坐标 用 X 标记 我想找到该带的宽度 我对图像处理不熟悉 请引导我前往正确的方法图像处理和Python图像处理package也能起到同样的作用 我认为 PIL Ope
  • 使用多行选项和编码选项读取 CSV

    在 azure Databricks 中 当我使用以下命令读取 CSV 文件时multiline true and encoding SJIS 似乎编码选项被忽略了 如果我使用multiline选项 Spark 使用默认值encoding那
  • 检测计算机何时解锁 Windows

    我用过这个优秀的方法 https stackoverflow com questions 20733441 lock windows workstation using python 20733443锁定 Windows 计算机 那部分工作
  • “ModuleNotFoundError:我的 Docker 容器中没有名为 的模块”

    我正在尝试在 Docker 容器中运行 python 脚本 但我不知道为什么 python 找不到任何 python 模块 我认为它与 PYTHONPATH 环境变量有关 所以我尝试将其添加到 Dockerfile 中 如下所示 ENV P
  • 透视包含字符串的 Pandas Dataframe - “没有要聚合的数字类型”错误

    关于此错误有很多问题 但环顾四周后 我仍然无法找到 解决解决方案 我正在尝试用字符串旋转数据框 以使一些行数据变成列 但到目前为止还没有成功 我的 df 的形状
  • 有效积累稀疏 scipy 矩阵的集合

    我有一个 O N NxN 的集合scipy sparse csr matrix 每个稀疏矩阵都有 N 个元素集 我想将所有这些矩阵加在一起以获得一个常规的 NxN numpy 数组 N 约为 1000 矩阵内非零元素的排列使得所得总和肯定不

随机推荐

  • PermGen 内存不足原因

    我经常在我的环境中检测 PermGen 中的 OOM java 6 jboss 4 2 3 不是一个大型网络应用程序 我知道 String intern 问题 但我没有足够的有价值的用途 MaxPermGen 大小的增加并不费力 从 128
  • 如何输出矩阵维度及其内容?

    是否可以使 GNU Octave 输出矩阵尺寸及其内容 例如 它应该产生某种东西 像这样 octave 1 gt X 1 2 3 4 X 2x2 1 2 3 4 octave 2 gt X 1 ans 1x2 1 2 在 MATLAB 中
  • 在java应用程序中保存用户设置的最佳方法是什么?

    在java桌面应用程序中安全保存用户设置的最佳方法是什么 例如 如果我想保存 Ftp 帐户设置 最好的方法是什么 Thanks The 首选项 API是存储用户和系统首选项的好方法 如果您想存储密码 则必须对其进行加密 这是一篇不错的文章
  • 如何在打字稿中将一个枚举映射到另一个枚举?

    我想将一个具有枚举类型的对象的属性映射到另一个具有其他枚举类型的对象的属性 我尝试过type1 a as Enum2 or Enum2 type1 a 没有成功 这是我的简化代码问题 enum Enum1 N 0 A 1 B 2 enum
  • 使用 Espresso 时出现 NullPointer 异常

    我正在尝试使用浓缩咖啡 但我收到了这个错误 如果我缺少一些代码 我就没有 任何想法都将受到高度赞赏 错误日志 java lang NullPointerException No instrumentation registered Must
  • 使用 Vee-Validate 验证提交时的子输入组件

    我目前正在尝试创建一个包含多个 输入字段 组件的注册表单 这些组件都需要在按下 提交 后进行验证 目前 当其中的文本发生更改时 它们都会自行验证 但我发现很难对所有输入字段进行全局调用以验证所有输入字段 我想要实现的目标如下 http ve
  • PostgreSQL:加速数百万行表中的 SELECT 查询

    我有一个包含 gt 450 万行的表 我的SELECT查询对于我的需求来说太慢了 该表是用以下命令创建的 CREATE TABLE all legs carrier TEXT dep hub TEXT arr hub TEXT dep dt
  • 使用 Passport-saml 注销:req.logout() 或 Strategy.logout(),或两者?

    我有一个关于使用 Passport saml 进行身份验证时注销用户的正确方法的问题 使用 Passport saml 的示例脚本显示注销如下 app get logout function req res req logout res r
  • 无法在打字稿中导入 svg 文件

    In typescript tsx 文件我无法使用以下语句导入 svg 文件 import logo from logo svg 转译器 说 ts cannot find module logo svg 我的 svg 文件只是
  • 导出签名的应用程序而不“优化”png图像

    当我从 eclipse 导出 apk 时 它会压缩所有 png 图像 例如 一张 4 6 KB 的 png 在 apk 中变成了 2 15 KB 不过我更喜欢使用优化 png 文件tinypng在构建 apk 之前 这会生成更小的文件 同样
  • Composer 没有为包生成 .git 文件夹

    这很奇怪 似乎是我错过的一些小事 前几天 当我composer install我得到了自己的供应商目录 git 这允许我进行更改并更新我自己的打包存储库 今天跑步后composer install the git每个包文件夹内的目录丢失 我
  • 烛台多个 Y 值

    我的任务是在 Windows 窗体中使用 MSChart 制作烛台图 我已经成功地制作了 3D 条形图 没有任何问题 但在互联网 微软的源代码 WinSamples 和大量的搜索之后 我找不到创建烛台图的正确方法 可以帮助我的是一个清楚的例
  • mat 不是数值元组:openCV 错误

    我写下了一段显示错误的代码 但我没有得到它 请帮助 它的显示垫不是数字元组 import cv import cv2 capture cv2 VideoCapture j 3gp while 1 frame1 capture read gr
  • java复制构造函数和继承

    经过一番搜索后 我没有找到有关复制构造函数和继承的问题的任何好的答案 我有两个班级 用户和实习生 Trainee继承自User 并为Trainee添加两个String参数 现在我成功地创建了 User 的复制构造函数 但我对 Trainee
  • 将 Visual Studio 2012 导出为 2010 sln 格式

    我的老师抱怨他无法在 VS2010 环境中读取 VS2012 格式 我在设置等中环顾四周 但找不到任何东西 如何将 VS2010 可读格式的项目提供给我的老师 手动修改sln 备份您的项目文件夹 复制 粘贴到另一个位置 例如名为 backu
  • 无法安装 npm 包:“npm ERR!errno -4048”

    我正在尝试安装 npm 包 node xmpp server 但安装失败 以前 当我尝试安装全局安装而不是本地安装的软件包时 但现在根本不安装 我以管理员身份运行 bash I ran npm install node xmpp serve
  • ISR和多线程程序中的C'Volatile'关键字?

    我读到了 C 的用法volatile内存映射硬件寄存器 ISR 和多线程程序中的关键字 1 注册 uint8 t volatile pReg while pReg 0 do sth pReg point to status register
  • 如何知道DIV中的所有元素是否已完全加载?

    有一个div其中将通过 Ajax 加载一些元素 图像 iframe 等 这些元素完全加载后 我需要执行一个函数div 如何确定数组中的所有元素div已满载 我使用 jQuery 作为库 对于图像和 iframe 您可以使用load even
  • 将MySQL的POINT转换为PHP中的文本

    使用 PHP 如何将值转换为POINT数据类型为字符串 例如POINT 34 601020 58 371020 最好以 WKT 或 GeoJSON 形式输出 如果我回显原始值 我会得到奇怪的字符 我尝试过使用bin2hex然后尝试将十六进制
  • for循环中的lambda仅取最后一个值[重复]

    这个问题在这里已经有答案了 我有代码 options INFO WARNING DEBUG for i in range len options option options i cMenu add command label format