Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Loops 对迭代函数()的For循环中的迭代器的说明---以及示例中使用的lambda函数_Loops_For Loop_Lambda_Iterator - Fatal编程技术网

Loops 对迭代函数()的For循环中的迭代器的说明---以及示例中使用的lambda函数

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循环在

这源于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循环在“文字”中做什么?迭代函数create_muti钳子意味着什么?这是如何告诉它循环多少次的
  • 我想它调用create_乘法器一次,然后函数返回lambda函数。是lambda函数循环迭代了5次,对吗

  • 乘法器(2)如何将值传递给lambda函数中的x——多个乘法器(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函数的更多信息,请查看。