我遇到了这个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)
kpts
和des
会有什么结果?他们的数据类型是什么?
答案 0 :(得分:1)
如果目标列表是以逗号分隔的目标列表:对象 必须是具有与目标相同数量的项目的可迭代项 在目标列表中,项目从左到右分配到 相应的目标。
他们的数据类型是什么?
我不知道,我也不在乎。 与Python执行赋值时相同。如果您要求这些物品稍后再做某事,可能会在意。
答案 1 :(得分:0)
Python有一种称为解包的机制。这在其他语言中称为解构分配。
它是这样的:当表达式求值为可迭代对象(例如list
或tuple
)时,您可以在赋值时将内部值传播到单独的变量:
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()
必须返回一个带有完全两个值的可迭代它的工作原理。