微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

For 循环中迭代 function() 的迭代器的解释? ---以及示例中使用的 lambda 函数

如何解决For 循环中迭代 function() 的迭代器的解释? ---以及示例中使用的 lambda 函数

这来自于描述 Python 中常见“陷阱”的 article。我的问题不是关于他所描述的问题,或者为什么下面的代码没有按照您的预期执行——它比这更基本。

我不明白函数上的迭代器在做什么:代码如下;

一个函数

def create_multiplers():
    return [lambda x: i*x for i in range(5)]

然后,有一个循环遍历函数

for multiplier in create_multipliers():
print(multiplier(2))
  1. for 循环“用文字”做什么?迭代函数 create_mutipliers 是什么意思?这如何告诉它循环多少次?

我认为它调用了 create_multipliers 一次,该函数返回 lambda 函数。是迭代 5 次的 lambda 函数循环——对吗?

  1. multiplier(2) 如何将值传递给 lambda 函数中的 x——mutlipiers(2) 是如何导致 lambda 2: i*2 for i in range(5) 的?

for 循环迭代一个函数和返回的 lambda 函数功能的组合真的让我感到困惑。这里有一些隐含的东西我只是不明白(我是一个中级 Python 用户)。我希望能“用文字”描述代码的执行。

解决方法

for 循环不是迭代函数,而是迭代 lambda 返回的 create_multipliers 函数列表。棘手的部分是 create_multipliers 中的 return 语句实际上是创建 (5) lambda 表达式列表的列表推导式。您可以通过单独查看此示例代码来了解这一点:

print([lambda x: i*x for i in range(5)])

输出:

[<function <listcomp>.<lambda> at 0x0E9F0198>,<function <listcomp>.<lambda> at 0x0E9F0150>,<function <listcomp>.<lambda> at 0x0E9F0108>,<function <listcomp>.<lambda> at 0x0E9F04F8>,<function <listcomp>.<lambda> at 0x0E9F0540>]

lambda 函数采用单个参数 x,每次通过 for 循环都会调用 lambda 函数列表中的 lambda 函数由 create_multipliers 返回并将 2 的值作为 x 传入。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。