Python 这是如何工作的——拆分、int、nparray和列表理解的顺序?

Python 这是如何工作的——拆分、int、nparray和列表理解的顺序?,python,Python,我有一行python代码,我正试图从一个函数中解密,该函数解析正在读取的文件中的一行代码。我已经用注释注释了我确实理解的行 #split a line that is read from the file by spaces. line = annotation_line.split() #Open the file, represented by the first arg in the lines #Lines are structured as below: #/path/to/Imag

我有一行python代码,我正试图从一个函数中解密,该函数解析正在读取的文件中的一行代码。我已经用注释注释了我确实理解的行

#split a line that is read from the file by spaces.
line = annotation_line.split()

#Open the file, represented by the first arg in the lines
#Lines are structured as below:
#/path/to/Image.png x1,y1,x2,y2,classNo x1,y1,x2,y2,classNo [etc]
#|Image file path  | Box for object 1  | Box for object 2  | Box for object n.
image = Image.open(line[0])

# grab the width and height of the image
iw, ih = image.size

#in this case 604 by 604.
h, w = input_shape

#line in question.
box = np.array([np.array(list(map(int,box.split(',')))) for box in line[1:]])
以下是我认为该行的作用:
首先,我把它分解成单独的函数

第一个参数我将其分解为以下参数:

stage1 = map(int,box.split(','))   
现在int不是一个局部或全局变量,但它被用作一个函数,我找不到这个函数的作用,我假设它把一些东西变成了一个整数,所以我假设这条线把这个框映射成一个整数序列。然而,box也不是全局或局部变量,只是在行本身中定义的,所以它似乎是从零映射到零

下一阶段如下

stage2 = [np.array(list(stage1) for box in line[1:]]
你把我弄丢了,变成一个数组,numpy(np是numpy)数组,一个包含从第二行数组到最后的所有参数框的第1阶段所有内容的列表?我甚至不确定这是一个语法正确的句子


这行代码到底是做什么的?您可以在上找到完整的代码。

如果您将行分隔错误,请从外部点开始,以

[          <code_that_gets_value>        for <element>  in  <iterable>]
[np.array(list(map(int,box.split(',')))) for    box      in   line[1:]]
这只是使用python切片来获取从第一个索引开始的所有内容的列表(省略索引0元素)

元素 这是您当前正在迭代的iterable的元素

获取值的代码 地图相当于(类似,但那是另一个故事)

除了在Python3中,它返回一个需要转换为列表的生成器,以便成为进入numpy数组的有效参数


所有这些的输出都是另一个列表,然后放入一个numpy数组。准确地说,这是一个充满整数的二维numpy数组。首先,这是一个很好的问题,询问一行代码的作用。。。这是令人困惑的原因吗?将其视为一个for循环,其中box是您当前迭代的对象。关于int,您是对的,它是一个@Sayse,list函数令人困惑,以及传递给函数的数据类型。我从不喜欢随意打字…:-/有帮助吗?我在Python3中运行这个,最后一行是否会改变功能?我不认为迭代器是一个好的词汇选择,因为它在python中已经有其他含义了。EDIT:在语法中,它只被称为a。还要注意,
map
在Python3中不返回生成器,而是返回迭代器。所有生成器都是迭代器,但并非所有迭代器都是生成器。@tuskiomi-python 2/3的唯一区别在于
map
已经在python 2中返回了一个列表,因此不需要
list()
@juanpa.arrivillaga-谢谢!最近我一直在使用大量的
yield
,把自己弄糊涂了。。(我从不使用地图)。我把它改为element,因为目标列表对我来说仍然是个蹩脚的名字
line[1:]
box
np.array(list(map(int,box.split(','))))
 [int(x) for x in box.split(',')]