当前位置: 首页 > 知识库问答 >
问题:

将lambda表达式转换为函数以更好地理解它

阎星河
2023-03-14
funcs = [lambda: i for i in range(3)]
for f in funcs: print(f())
funcs = [lambda i=i:i for i in range(3)]
for f in funcs: print(f())

这将分别打印出1,2,3,这就是我希望它工作的方式。下面是我的自定义函数:

func = []
def i(i):
    for i in range(i):
            func = i

>>> i(3)
0
1
2

上面的函数是正确的吗?它镜像了lambda表达式,我们可以按原样详细说明每个步骤?我已经尽力了。

正如我在上面提到的,为了镜像第一个lambda表达式,我一直在开发一个函数,因此我不知道该表达式是如何工作的。有谁能帮我解释一下这个lambda是怎么工作的吗;我有一段时间一直在试图理解在函数执行时函数体中的名称是如何和为什么被求值的。

共有1个答案

融泓
2023-03-14

您的第一个示例相当于:

In [ ]:
def outer():
    return x

funcs = []
for x in range(3):
    funcs.append(outer)

for f in funcs:
    print(f())

Out[ ]:
2
2
2

但这正好相当于:

In [ ]:
funcs = [outer] * 3
x = 2
for f in funcs:
    print(f())

Out[ ]:
2
2
2

您的第二个示例相当于:

In [ ]:
def outer(x):
    def inner():
        return x
    return inner

funcs = []
for x in range(3):
    funcs.append(outer(x))

for f in funcs:
    print(f())

Out[ ]:
0
1
2
 类似资料:
  • 我正在尝试执行以下操作(cb=CriteriaBuilder): 但我得到以下语法错误: 绑定不匹配:(表达式之间的泛型方法 是否可以转换表达式

  • 问题内容: 我想了一下,想到了一个有趣的问题,假设我们有一个配置(输入)文件,其中: 此外,我们还有s 的列表: 有没有办法将s(等)转换为代表lambda表达式的s?然后可以用作: 我将如何编写这样的方法? 我可以从JDK / JRE中重用吗? 我需要自己编写所有内容吗? 是否有可能将范围缩小到仅捕获lambda的其他内容? 问题答案: 马可对这个问题的评论是正确的。您无法从文件中读取裸Java

  • 本文向大家介绍Java函数式编程(一):你好,Lambda表达式,包括了Java函数式编程(一):你好,Lambda表达式的使用技巧和注意事项,需要的朋友参考一下 第一章 你好,lambda表达式! 第一节 Java的编码风格正面临着翻天覆地的变化。 我们每天的工作将会变成更简单方便,更富表现力。Java这种新的编程方式早在数十年前就已经出现在别的编程语言里面了。这些新特性引入Java后,我们可以

  • 问题内容: 有没有更好的功能方法,可以使用Java 8 lambda语法将“ key:value”形式的字符串数组转换为a ? 我现在拥有的解决方案似乎并没有真正起作用: 问题答案: 您可以修改解决方案以将的数组收集到中(而不是使用): 当然,该解决方案不能防止无效输入。也许您应该添加一个过滤器,以防拆分字符串没有分隔符: 这仍然不能保护您免受所有无效输入的侵害(例如,将导致抛出)。

  • 我在JavaFX上有一个应用程序。在这个应用程序中,我需要实现专栏的编辑器。在旧版本中,该代码运行良好: 但是当我试图用lambda重写代码时 我得到一个错误:错误:java:不兼容的类型:lambda表达式中的不兼容参数类型告诉我如何指定lambda表达式的类型?

  • 我正在尝试使用lambda函数来快速测试,但我在使用它时遇到了困难。我不知道为什么事情没有像(我觉得)应该的那样工作。 这与我预期的一样: 然而,这并没有: 给出错误: 错误:没有合适的转换函数从" lambda []double(double S)- 我不明白为什么在捕获列表中添加一些内容会改变这里的情况。我对C语言中的lambdas还比较陌生,所以可能在某个地方犯了一个愚蠢的错误。。。 我需要