有帮助吗?

解决方案

self._v_scaleInfo:是一个元组数组,大概就像 [(x,y),(x,y),...] 所以 for width,height in self._v_scaleInfo:循环遍历数组填充宽度和高度以及元组值。

php会像:

$scaleInfo = array(array(x,y), array(x,y),...);

for( $i = 0; $i < count($scaleInfo); $i++ ) {
  $width = $scaleInfo[$i][0];
  $height = $scaleInfo[$i][1];
  ...
}

其他提示

在你的简单示例中的,z 中,z将是一个坐标对的列表,如 [(0,1),(2,5),(4, 3)] 。每次转过for循环, x 变量获取对中的第一个坐标, y 获得第二个坐标。

在python中,您可以拥有多个返回值。你也可以定义这样的元组

t = (1,2,3)

要访问t中的元素,您可以执行以下操作:

  

a,b,c = t

然后a的值为1,等等。

如果你有一个包含2个元素元组的数组,你可以使用以下代码枚举它们

z = [(1, 2), (3, 4), (5, 6)]
for x, y in z:
   print x, y

产生以下

1 2
3 4
5 6

假设z是Python中的元组列表。

Z = [(1,2), (1,3), (2,3), (2,4)]

它会是这样的:

$z = array(array(1,2), array(1,3), array(2,3), array(2,4));

将其用于x,y在z中将导致:

z = [(1,2), (1,3), (2,3), (2,4)]
for x, y in z:
    print "%i %i" % (x,y)


1 2
1 3
2 3
2 4

所以翻译

for x, y in z:

进入PHP会是这样的:

for ($i=0; $i < count($z); $i++){
    $x = $z[$i][0];
    $y = $z[$i][1];

概念

for x,y in z

实际上是使用枚举器(迭代器模式的语言特定实现)进行迭代,for循环基于基于索引的迭代。

对于x,y在z中在语义上就像

for (x=0 ; x<z.length ; x++ )
     for (y=1; x<z.length;y++) print z[x],z[y]

请注意,这适用于python中的元组。

它大致相当于(伪代码):

For every item i in z:
    x = i[0]
    y = i[1]
    Loop body happens here

这意味着 z 中的每个项目都包含2个元素(例如,每个项目都是包含2个项目的列表)。

此构造允许您迭代多维集合,以便您可以拥有3x2列表:

z = [[1,2], [3,4], [5,6]]
for x, y in z:
    print x, y

打印:

1 2
3 4
5 6

可以在字典上使用相同的构造,这也是一个二维集合:

z = {1:"one", 2:"two", 3:"three"}
for x, y in z.items():
    for x, y in z.items():
        print x, y

打印:

1 one
2 two
3 three

在Python中,这个结构是通用的,适用于任何维度,将我们原来的3x2列表更改为2x3列表,我们可以这样做:

z = [[1,2,3], [4,5,6]]
for w, x, y in z:
    print w, x, y

打印:

1 2 3
4 5 6

在PHP中我认为你必须使用nest for循环这样做,我不认为有一个构造可以在Python中进行多维度列表解构。

scroll top