这个赋值语句是什么意思?

时间:2016-05-23 20:47:57

标签: python variables

我遇到了这个Python脚本:

fea_det = cv2.xfeatures2d.SIFT_create()
des_ext = cv2.xfeatures2d.SIFT_create()

des_list = []

for image_path in image_paths:
    im = cv2.imread(image_path)
    kpts = fea_det.detect(im)
    kpts, des = des_ext.compute(im, kpts)
    des_list.append((image_path, des))

我的问题与不同变量和参数的含义无关,而是与我们如何特别阅读此陈述有关:

kpts, des = des_ext.compute(im, kpts)

kptsdes会有什么结果?他们的数据类型是什么?

2 个答案:

答案 0 :(得分:1)

Comma separated identifiers on LHS of assignment statement performs iterable unpacking on result of RHS。引用文档:

  

如果目标列表是以逗号分隔的目标列表:对象   必须是具有与目标相同数量的项目的可迭代项   在目标列表中,项目从左到右分配到   相应的目标。

他们的数据类型是什么?

我不知道,我也不在乎。 与Python执行赋值时相同。如果您要求这些物品稍后再做某事,可能会在意。

答案 1 :(得分:0)

Python有一种称为解包的机制。这在其他语言中称为解构分配

它是这样的:当表达式求值为可迭代对象(例如listtuple)时,您可以在赋值时将内部值传播到单独的变量:

def get_2_tuple():
    return ('foo', 'bar')

values = get_2_tuple() # no unpacking
foo, bar = values # unpacking!

foo, bar = get_2_tuple() # same-line unpacking

解包行为可以raise Exception:函数get_2_tuple() 必须返回一个带有完全两个值的可迭代它的工作原理。