这个代码是做什么的?我说的主要是iframenum

for i, framenum in enumerate(range(start, end + 1)):
    s.append(self.getSkeleton(framenum))
    d[i] = self.getDepth(framenum)
    u[i] = to_grayscale(self.getUser(framenum))
    g[i] = to_grayscale(self.getRGB(framenum))

我能说每一次i的改变都会framenum改变range(start, end + 1)次吗?
这相当于:
for i in enumerate(range(start, end + 1)):
    for framenum in enumerate(range(start, end + 1)):
        s.append(self.getSkeleton(framenum))
        d[i] = self.getDepth(framenum)
        u[i] = to_grayscale(self.getUser(framenum))
        g[i] = to_grayscale(self.getRGB(framenum))

最佳答案

不,它们不相等。在Python中,当iterable的元素也是iterable时,可以在循环定义中解压它们的值,这就是第一个示例中发生的情况。
换句话说,enumerate返回元组生成器。这些元组有两个元素:枚举对象的索引和实际值。
因为每个元组都有两个元素,所以使用for i, framenum in...来命名元组中的每个元素是一种简单易读的方法。基本上是一样的:

for tup in enumerate(range(start, end + 1)):
    i = tup[0]
    framenum = tup[1]

在第二个示例中,您将在同一个iterable上迭代两次。iframenum都将始终是由enumerate生成的元组之一,因此它绝对没有意义。
再举几个例子:
iterable1 = [[1,2], [3,4]]
for i, j in iterable1:
    print(i)
    print(j)

在第一次迭代中,i将为1,j将为2。
for i in iterable1:
    print(i)

i将在第一次迭代中[1,2]
iterable2 = [[1,2,3], [4,5,6]]
for i, j, k in iterable2:
    print(i)
    print(j)
    print(k)

在第一次迭代中,i将为1,j将为2,k将为3。
for i in iterable2:
    print(i)

i将在第一次迭代中[1,2,3]
for i,j in iterable2:
    print(i)
    print(j)

这将产生一个错误,因为元素([1,2,3][4,5,6])不是完全由两个元素构成的。

10-07 13:47