Declaración de variable múltiple

Vi esta statement en Python, pero no entiendo lo que significa y no puedo encontrar una explicación:

ret, thresh = cv2.threshold(imgray, 127, 255, 0) 

La pregunta es: ¿por qué hay una coma entre ret y thresh ? ¿Qué tipo de asignación es esa?

Esa es una asignación de “tupla” o de “desestructuración” ; consulte, por ejemplo, semántica de asignación múltiple . cv2.threshold devuelve una tupla que contiene dos valores, por lo que es equivalente a:

 temp = cv2.threshold(...) ret = temp[0] thresh = temp[1] 

Ver las declaraciones de asignación en la referencia del idioma:

Si la lista de objectives es una lista de objectives separados por comas: el objeto debe ser iterable con el mismo número de elementos, ya que hay objectives en la lista de objectives y los elementos se asignan, de izquierda a derecha, a los objectives correspondientes.

Este es un valor que desempaqueta la syntax.
cv2.threshold(imgray,127,255,0) devuelve una tupla de dos elementos.
Con esta syntax, asigna elementos de esta tupla a las variables separadas ret y thresh .

Puede usar esta syntax para descomprimir las tuplas en variables individuales, por ejemplo:

 a, b = (0, 1) # a == 0 # b == 1 

Su código es el mismo que:

 result = cv2.threshold(...) ret = result[0] thresh = result[1]