函数似乎返回多个结果或:什么是隐式元组解包

Q L*_*Liu 1 python for-loop

有人可以解释下面的代码行吗?它是某种嵌套for循环吗?如果是这样,有人可以将其重写为等效的嵌套for循环.allPositions参数是一个列表,synapsesPerSegment是一个int变量.

for rx,ry in random.sample(allPositions, synapsesPerSegment):
Run Code Online (Sandbox Code Playgroud)

Joe*_*Joe 6

这是一个正常的循环.没有筑巢.random.sample返回一个元素列表,从中allPositions获取synapsesPerSegment许多项目.作为变量被分配给在for循环表格中的元组(rx, ry),这表明allPositions在形式元组的列表(或集合)(rx, ry),其被分配到rxry每一次迭代.如果你有一个元组列表,for循环'将每次迭代'解包'到那些变量.例如,如果你有

(a, b) = (99, 100)

那么这个分配将解包:

(c, d) = (a, b)

这样c == 99d == 100.

回到这个问题,这里有一些示例数据:

如果我们说: allPositions = [(1,100), (2, 200), (3, 300), (4, 400)]

并且,例如: synapsesPerSegment = 3

然后 random.sample(allPositions, synapsesPerSegment)可能会产生,[(3, 300), (1,100), (2, 200)]因为它allPositions随机需要3个项目.

然后迭代:

  • 迭代1 : rx = 4,ry = 400
  • 迭代2 : rx = 1,ry = 100
  • 迭代3 : rx = 2,ry = 200

  • 请注意,"allPositions"是2元组列表的事实对于之前未见过解包语法的人来说可能并不"明显". (2认同)