【发布时间】:2015-04-16 13:46:45
【问题描述】:
我在Python中看到了这个声明,但是我不明白它是什么意思,也找不到解释:
ret, thresh = cv2.threshold(imgray, 127, 255, 0)
问题是:为什么ret 和thresh 之间有一个逗号?这是什么类型的任务?
【问题讨论】:
标签: python opencv variable-declaration
我在Python中看到了这个声明,但是我不明白它是什么意思,也找不到解释:
ret, thresh = cv2.threshold(imgray, 127, 255, 0)
问题是:为什么ret 和thresh 之间有一个逗号?这是什么类型的任务?
【问题讨论】:
标签: python opencv variable-declaration
这是一个 "tuple" 或 "destructuring" 赋值 - 参见例如Multiple assignment semantics。 cv2.threshold 返回一个包含两个值的元组,所以它相当于:
temp = cv2.threshold(...)
ret = temp[0]
thresh = temp[1]
请参阅语言参考中的Assignment Statements:
如果目标列表是一个逗号分隔的目标列表:该对象必须是一个可迭代对象,其项数与目标列表中的目标数相同,并且这些项从左到右分配给相应的目标。
【讨论】:
这是一个值解包语法。cv2.threshold(imgray,127,255,0) 返回一个二元组。
使用此语法,您可以将此元组的元素分配给单独的变量 ret 和 thresh。
【讨论】:
您可以使用此语法将元组解压缩为单个变量,例如。 g.:
a, b = (0, 1)
# a == 0
# b == 1
您的代码与以下内容相同:
result = cv2.threshold(...)
ret = result[0]
thresh = result[1]
【讨论】: