Significado del uso de comas y guiones con operador de asignación de Python?
-
19-09-2019 - |
Pregunta
La lectura a través de Peter Norvig Resolver Sudoku Cada ensayo , me he encontrado un par de frases hechas que Python Nunca había visto antes.
Soy consciente de que una función puede devolver una tupla / lista de valores, en cuyo caso se pueden asignar múltiples variables a los resultados, como
def f():
return 1,2
a, b = f()
Pero lo que es el significado de cada uno de los siguientes?
d2, = values[s] ## values[s] is a string and at this point len(values[s]) is 1
Si len(values[s]) == 1
, entonces, ¿cómo es esta declaración diferente que d2 = values[s]
?
Otra pregunta acerca del uso de un guión en la asignación aquí:
_,s = min((len(values[s]), s) for s in squares if len(values[s]) > 1)
¿El guión tiene básicamente el efecto de descartar el primer valor devuelto en la lista?
Solución
d2, = values[s]
es como a,b=f()
, a excepción de desembalaje 1 tuplas de elementos.
>>> T=(1,)
>>> a=T
>>> a
(1,)
>>> b,=T
>>> b
1
>>>
a
es tupla, b
es un número entero.
Otros consejos
_
es como cualquier otro nombre de variable pero por lo general significa "no me importa acerca de esta variable".
La segunda pregunta: ¿se trata de "valor de desembalaje". Cuando una función devuelve una tupla, se puede desempaquetar sus elementos.
>>> x=("v1", "v2")
>>> a,b = x
>>> print a,b
v1 v2
La _ en la cáscara Python también se refiere al valor de la última operación. Por lo tanto
>>> 1
1
>>> _
1
Las comas se refieren a tupla desembalaje. Lo que sucede es que el valor de retorno es una tupla, y así se desempaqueta en las variables separadas por comas, en el orden de los elementos de la tupla.
Puede utilizar la coma final en una tupla de esta manera:
>>> (2,)*2
(2, 2)
>>> (2)*2
4