Loops 对迭代函数()的For循环中的迭代器的说明---以及示例中使用的lambda函数
这源于Python中描述常见的“gotchas”。我的问题不是关于他所描述的gotcha,也不是为什么下面的代码没有达到您可能期望的效果——它比这更基本 我不明白函数的迭代器在做什么:下面是代码 有一个功能:Loops 对迭代函数()的For循环中的迭代器的说明---以及示例中使用的lambda函数,loops,for-loop,lambda,iterator,Loops,For Loop,Lambda,Iterator,这源于Python中描述常见的“gotchas”。我的问题不是关于他所描述的gotcha,也不是为什么下面的代码没有达到您可能期望的效果——它比这更基本 我不明白函数的迭代器在做什么:下面是代码 有一个功能: def create_multiplers(): return [lambda x: i*x for i in range(5)] for multiplier in create_multipliers(): print(multiplier(2)) 然后,有一个for循环在
def create_multiplers():
return [lambda x: i*x for i in range(5)]
for multiplier in create_multipliers():
print(multiplier(2))
然后,有一个for循环在函数上迭代:
def create_multiplers():
return [lambda x: i*x for i in range(5)]
for multiplier in create_multipliers():
print(multiplier(2))
lambda 2:i*2,用于范围(5)
在函数上迭代的for循环和返回的lambda函数的功能的组合让我非常困惑。这里有一些隐含的东西我就是不明白(我是一个Python中级用户)。我希望“用文字”描述代码的执行情况。for循环不是在函数上迭代,而是在
create\u乘数
返回的lambda
函数列表上迭代。棘手的部分是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_乘数
返回,并将值2作为x
传递,谢谢。因此,for循环语句调用create\u乘数()
。该函数返回5个lambda函数的列表。不知何故,现在迭代器,乘法器,迭代这些-,我不明白它怎么知道要这样做…而且,乘法器(2)如何在lambda函数中传递2到x。你能给我介绍一下吗?好的,现在你看到create\u multiplers()
返回一个列表,那么for multipler
语句只是以典型的Python方式在该列表上迭代。当在print
语句中调用时,multiplier
的计算结果是什么?它的计算结果是一个lambda(无名)函数,因为这是create\u multipliers()
返回的列表中的内容。要了解有关lambda函数的更多信息,请查看。