【问题标题】:Don't understand this python For loop不明白这个 python For 循环
【发布时间】:2011-09-18 18:58:02
【问题描述】:

我仍然是一个 python 新手,但我正在通过Pyneurgen neural network tutorial 工作,并且我不完全理解用于创建输入数据的 for 循环在这种情况下是如何工作的:

for position, target in population_gen(population):
    pos = float(position)
    all_inputs.append([random.random(), pos * factor])
    all_targets.append([target])`

循环到底是什么?我以前没有遇到过在循环中使用逗号和函数。

提前感谢您的帮助:)

【问题讨论】:

    标签: python


    【解决方案1】:

    函数 population_gen 返回一个元组列表,这些元组使用这种语法自动解压缩成变量名。

    所以基本上,你会从函数中得到如下的返回值:

    [("pos1", "target1"), ("pos2", "target2"), ]
    

    给定这个例子,在 for 循环的第一次迭代中,变量“position”和“target”将具有值:

    position = "pos1"
    target = "target1"
    

    在第二次迭代中:

    position = "pos2"
    target = "target2"
    

    【讨论】:

    • 感谢这个有用的答案!如果population_gen 是字典,它也有效吗?
    【解决方案2】:

    元组解包。

    for a, b in [(1, 2), (3, 4)]:
      print a
      print b
      print 'next!'
    

    而函数只是一个函数。

    【讨论】:

      【解决方案3】:

      该函数要么返回一个序列,要么用作称为“生成器”的东西:它在一个序列中吐出连续的元素,供调用者迭代。关于 yield 关键字的This question 对它们的工作原理进行了深入的讨论。

      至于逗号,由于函数(显然)返回一个二元组,所以以逗号分隔的名称列表是一种方便的方式来命名元组的各个元素,而无需自己解包。

      【讨论】:

        【解决方案4】:

        它叫做tuple unpackingpopulation_gen (generator) 函数产生恰好包含两个元素的元组。在python中,您可以像这样将多个变量分配给元组

        a, b = (1, 2)
        

        所以在这个for 循环中,您直接将当前迭代项中的两个元组值放入您的两个变量positiontarget

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-08-24
          • 1970-01-01
          • 2018-08-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多