当前位置: 首页 > 面试题库 >

怪异的行为:列表理解内的Lambda

东方俊材
2023-03-14
问题内容

在python 2.6中:

[x() for x in [lambda: m for m in [1,2,3]]]

结果是:

[3, 3, 3]

我希望输出为[1、2、3]。即使使用非列表理解方法,我也会遇到完全相同的问题。甚至在我将m复制到另一个变量之后。

我想念什么?


问题答案:

为了使Lambda记住的值m,可以使用具有默认值的参数:

[x() for x in [lambda m=m: m for m in [1,2,3]]]
# [1, 2, 3]

之所以可行,是因为默认值在定义时设置一次。现在,每个lambda都会使用自己的默认值,m而不是m在lambda执行时在外部范围中查找的值。



 类似资料:
  • 我有两个广播接收器和两个意图,我想点击一个按钮,5米后开始广播1和10米后开始广播2,发生的是它们都在我点击后10米开始,我猜,意图不是唯一的,但我为它们每个设置了不同的reqeustCode。 按钮的onclick:

  • 问题内容: 我不了解python中列表的行为: 为什么一个元素的分配影响另一个元素?感谢您的回答! 问题答案: 当您将一个列表相乘时,它会复制对该列表的引用,但不会创建该列表的副本。由于列表是可变的,因此在更改列表时,所有对其引用的引用都会更改。 用ASCII术语来说: 您可以清楚地看到更改list3将同时影响两个位置。 如果要创建可变长列表而不复制引用,则应执行以下操作: 在这里,我们使用列表理

  • 我有一个ui显示的数据表:repeat。因为我希望用户能够在每行的基础上更改数据,所以每行都包含在一个h:form中。最后,每个h:form都有一个带有f:ajax标记的按钮。我的行为越来越不一致。 上述方法可行,但带宽显然不便宜。 如果我将render=“@all”更改为render=“@form”,Firebug显示发送的部分响应正常,但我的浏览器(Firefox)神秘地没有显示它。所以我猜它

  • 问题内容: 在Python(2.7)中发现了从未有过的有趣的东西。 这个: 确实有效,结果是: 但 给 有人可以解释为什么吗?感谢您的回答。 问题答案: Python区分和运算符,并为它们提供了单独的挂钩。和。该类型只是为后者提供了不同的实现。 列表分别实现这些功能更为有效;必须返回一个全新的列表,而可以扩展然后返回。 在C代码中,是由所实现的,该只需调用,或者在python代码中,由。后者根据设

  • 我正在尝试从2个设备(Nexus 5和Samsung S5)读取NFC标签。 我正在通过前台调度读取标记,并使用intent。在Samsung S5上,Tech列表列出了、和,但在Nexus 5上,它只列出了。 我知道Nexus 5不支持恩智浦的MIFARE Classic标签。因此,我理解了为什么它没有列出。但是为什么它也不在tech列表中显示呢? 当我尝试使用intent读取标签时,三星S5读

  • 问题内容: 我有这个非常简单的课程: 在类路径中指定的此上下文文件不存在。我几乎可以输入任何想要的名称,并且代码不会中断。我的意思是测试运行正常,就好像该文件确实存在。 如果我从: classpath 到 classpath* 做了一个小的更改,它会发出喙,表示该文件不存在,这也是我在第一种情况下的预期行为。 春季版本3.2.3。 有人可以解释这种奇怪的行为吗? 编辑 建议的日志内容: 我什至尝试

  • 我正在设计一个网站,有一些h3标题和段落,包装在一个名为“featured-info”的div类中。此外,我还有一个footer元素,它位于主体中的主包装器中。各段用斜体字写成: 并且页脚有边框: 页脚文本也是一个h4向上感知: 主要的问题是我有一个设置:@media screen和(最小宽度:750px),它使一些导航按钮内联,并调整一些文本的大小,但是...当页面大小小于750px时,页脚样式