Python数据类型,它是什么样的数据结构?

时间:2017-07-07 21:22:22

标签: python

reshape, crop = {
1: ((1952, 3264), (1944, 3240)),
2: ((2480, 4128), (2464, 4100)),
}

offset = {1: 6404096, 2: 10270208,}[ver]

#where ver is defined as a dictionary

ver = {
    'RP_ov5647': 1,
    'RP_imx219': 2,
    }[camera.exif_tags['IFD0.Model']]

这些是什么结构? ver报告为int类型。我糊涂了。 [ver]在offset的作业中如何运作?

2 个答案:

答案 0 :(得分:0)

让我们看看......

1

这里定义了一个包含密钥2reshape的字典。附在每个键上的是一个元组元组。我相信真实代码中有更多条目,最后一项是逗号。但是,大多数此对象都会丢失到垃圾回收中。对cropreshape = 1 crop = 2 的元组分配将导致仅存储密钥。所以这件事的结果与:

相同
offset = {1: 6404096, 2: 10270208,}[ver]

有趣,如果没用。下一步...

1

所以这里定义了另一个带有键2ver的字典以及与它们相关联的长整数值。然后,它使用offset将此字典编入索引,并将此索引处的值指定为ver。由于尚未定义#where ver is defined as a dictionary ver = { 'RP_ov5647': 1, 'RP_imx219': 2, }[camera.exif_tags['IFD0.Model']] ,这实际上会导致异常。假设在前一个代码之前给出了以下代码:

'RP_ov5647'

这里我们还有另一本字典。这次密钥为'RP_imx219'1,其值为2camera.exif_tags['IFD0.Model']。此字典的索引值为camera.exif_tags。假设'IFD0.Model'是具有键控索引的对象,其中一个索引为'RP_ov5647',结果值为'RP_imx219'ver1将被分配26404096

因此,1或2将用于索引我们的上述偏移值,从而导致偏移分配为10270208bytes

简而言之,它完全是语法上有效的一堆。谢谢分享。

答案 1 :(得分:-1)

首先,你的初始陈述不会做你想要的(我认为):你在作业的左边有两个变量,但只有一个值 - 一个字典 - 在对。我认为你最后会遗漏[ver]。如上所述,该语句将构建字典,提取键(1,2),并将它们分配给变量,忽略维度元组。

上面的变量ver是您在字典中查找的整数。

此代码似乎旨在从模型名称开始,并根据该模型查找适当的参数。让我们按照正确的顺序查看代码,并使用几个中间变量。

# Dictionary to look up version number (1 or 2),
#   given the model name.
model_to_version = {
    'RP_ov5647': 1,
    'RP_imx219': 2,
    }

# Get the model name from the camera info object.
# Here on Stack Overflow, we have no idea of the structure,
#   but merely have to trust that this works.
model_name = camera.exif_tags['IFD0.Model']

# Now, get the version number we're using as an internal key.
# This will return 1 or 2.
version = model_to_version[model_name]

# The offset look-up is unchanged.
offset = {1: 6404096, 2: 10270208}[version]

# Dictionary to look up sizing information (shape & crop).
# Each entry is a pair of x-y dimension pairs.
size_info = {
    1: ((1952, 3264), (1944, 3240)),
    2: ((2480, 4128), (2464, 4100)),
}

# Finally, look up the proper set of sizes:
shaping, crop = size_info[ver]

完成所有这些操作后,我们为shapingcrop提供了此相机模型的相应尺寸,并且offset在输入流中具有相应的像素偏移(我假设)

这就是你需要的吗?