Significato utilizzando le virgole e trattini di sottolineatura con Python operatore di assegnazione?
-
19-09-2019 - |
Domanda
Leggendo di Peter Norvig Solving Ogni Sudoku Puzzle saggio , ho incontrato un paio di idiomi Python che ho 'ho mai visto prima.
Sono consapevole del fatto che una funzione può restituire una tupla / elenco di valori, nel qual caso è possibile assegnare più variabili i risultati, come ad esempio
def f():
return 1,2
a, b = f()
Ma qual è il significato di ciascuno dei seguenti?
d2, = values[s] ## values[s] is a string and at this point len(values[s]) is 1
Se len(values[s]) == 1
, allora come è questa dichiarazione diversa da quella d2 = values[s]
?
Un'altra domanda su come utilizzare una sottolineatura nell'assegnazione qui:
_,s = min((len(values[s]), s) for s in squares if len(values[s]) > 1)
Fa la sottolineatura hanno l'effetto di sostanza scartando il primo valore restituito nella lista?
Soluzione
d2, = values[s]
è come a,b=f()
, tranne che per l'estrazione, 1 elemento tuple.
>>> T=(1,)
>>> a=T
>>> a
(1,)
>>> b,=T
>>> b
1
>>>
a
è tupla, b
è un numero intero.
Altri suggerimenti
_
è come qualsiasi altro nome di variabile ma di solito significa "Non mi importa di questa variabile".
La seconda domanda: si tratta di "valore di disimballaggio". Quando una funzione restituisce una tupla, è possibile decomprimere i suoi elementi.
>>> x=("v1", "v2")
>>> a,b = x
>>> print a,b
v1 v2
Il _ nel guscio Python si riferisce anche al valore dell'ultima operazione. Quindi
>>> 1
1
>>> _
1
Le virgole si riferiscono a tupla disimballaggio. Succede che il valore restituito è una tupla, e quindi viene decompresso nelle variabili separate da virgole, nell'ordine degli elementi della tupla.
È possibile utilizzare la virgola finale in una tupla come questo:
>>> (2,)*2
(2, 2)
>>> (2)*2
4