2009-11-10 12 views
36

Leyendo a través de Peter Norvig's Solving Every Sudoku Puzzle essay, me he encontrado con algunos modismos de Python que nunca he visto antes.Significado del uso de comas y guiones bajos con el operador de asignación Python?

Soy consciente de que una función puede devolver una tupla/lista de valores, en cuyo caso se puede asignar múltiples variables a los resultados, tales como

def f(): 
    return 1,2 

a, b = f() 

Pero ¿cuál es el significado de cada una de las ¿siguiendo?

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?

Respuesta

33

d2, = values[s] es igual 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.

+2

Así 'b, = T' los medios conseguir el primer elemento de ese par de valores? ¿Es sinónimo de 'b = T [0]'? Necesito más ejemplos o menos explicaciones verbales ^^ – Sherlock70

+2

Sí, es el mismo resultado – eduffy

15

_ es como cualquier otro nombre de variable, pero generalmente significa "No me importa esta variable".

La segunda pregunta: es el "desempaquetado de valores". Cuando una función devuelve una tupla, puede descomprimir sus elementos.

>>> x=("v1", "v2") 
>>> a,b = x 
>>> print a,b 
v1 v2 
6

El _ en el shell de Python también se refiere al valor de la última operación. Por lo tanto,

>>> 1 
1 
>>> _ 
1 

Las comas se refieren al desempaque tuple. Lo que ocurre es que el valor de retorno es una tupla, por lo que se desempaqueta en las variables separadas por comas, en el orden de los elementos de la tupla.

+1

Sí, pero en el contexto dado anteriormente, es una variable "no me importa". –

5

Usted puede usar la coma final en una tupla de esta manera:

>>> (2,)*2 
(2, 2) 

>>> (2)*2 
4 
Cuestiones relacionadas