我是一名php程序员,试图理解python的语法 我得到了基本的for in
for i in range(0,5):
php中的将是
for ($i = 0; $i < 5; $i++){
但这是做什么的
for x, y in z:
什么是php的翻译?
这是我正在翻译成php的完整代码:
def preProcess(self):
""" plan for the arrangement of the tile groups """
tier = 0
tileGroupNumber = 0
numberOfTiles = 0
for width, height in self._v_scaleInfo:
#cycle through columns, then rows
row, column = (0,0)
ul_x, ul_y, lr_x, lr_y = (0,0,0,0) #final crop coordinates
while not ((lr_x == width) and (lr_y == height)):
tileFileName = self.getTileFileName(tier, column, row)
tileContainerName = self.getNewTileContainerName(tileGroupNumber=tileGroupNumber)
if numberOfTiles ==0:
self.createTileContainer(tileContainerName=tileContainerName)
elif (numberOfTiles % self.tileSize) == 0:
tileGroupNumber += 1
tileContainerName = self.getNewTileContainerName(tileGroupNumber=tileGroupNumber)
self.createTileContainer(tileContainerName=tileContainerName)
self._v_tileGroupMappings[tileFileName] = tileContainerName
numberOfTiles += 1
# for the next tile, set lower right cropping point
if (ul_x + self.tileSize) < width:
lr_x = ul_x + self.tileSize
else:
lr_x = width
if (ul_y + self.tileSize) < height:
lr_y = ul_y + self.tileSize
else:
lr_y = height
# for the next tile, set upper left cropping point
if (lr_x == width):
ul_x=0
ul_y = lr_y
column = 0
row += 1
else:
ul_x = lr_x
column += 1
tier += 1
答案 0 :(得分:1)
self._v_scaleInfo:
是一个元组数组,大概就像[(x,y),(x,y),...]
那样
for width, height in self._v_scaleInfo:
使用元组值循环遍历数组填充宽度和高度。
$scaleInfo = array(array(x,y), array(x,y),...);
for( $i = 0; $i < count($scaleInfo); $i++ ) {
$width = $scaleInfo[$i][0];
$height = $scaleInfo[$i][1];
...
}
答案 1 :(得分:1)
在您的简单示例for x,y in z
中,z将是一个坐标对列表,例如[(0,1), (2,5), (4,3)]
。每转过for循环,x
变量获得对中的第一个坐标,y
获得第二个坐标。
答案 2 :(得分:0)
它大致相当于(伪代码):
For every item i in z:
x = i[0]
y = i[1]
Loop body happens here
这意味着z
中的每个项目都包含2个元素(例如,每个项目都是包含2个项目的列表)。
答案 3 :(得分:0)
在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
答案 4 :(得分:0)
假设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];
答案 5 :(得分:0)
概念
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中的元组。
答案 6 :(得分:0)
此构造允许您迭代多维集合,以便您可以拥有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中进行多维度列表解构。