Significato utilizzando le virgole e trattini di sottolineatura con Python operatore di assegnazione?

StackOverflow https://stackoverflow.com/questions/1708292

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?

È stato utile?

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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top