2010-03-26 17 views
15

Ho una funzione che restituisce 3 numeri, ad esempio:Assegnazione Nessuno

def numbers(): 
    return 1,2,3 

di solito mi chiamano questa funzione per ricevere tutti e tre numeri restituiti ad esempio:

a, b, c = numbers() 

Tuttavia, ho un caso in cui ho solo bisogno del primo numero restituito. Ho provato ad utilizzare:

a, None, None = numbers() 

Ma ricevo "SyntaxError: assegnazione a Nessuno".

So, ovviamente, che posso utilizzare la prima opzione che ho menzionato e quindi semplicemente non utilizzare le variabili "b" e "c". Tuttavia, questo sembra uno "spreco" di due vars e sembra una programmazione sbagliata.

+1

Cosa c'è che non va con 'a, b, c = numbers()'? Non devi usare 'b' e' c'. Perché aggiungere complessità? –

risposta

21
a, _, _ = numbers() 

è un modo pigmico per farlo. In Python 3, si potrebbe anche usare:

a, *_ = numbers() 

Per chiarire _ è un nome di variabile normale in Python, tranne che viene convenzionalmente usato per riferirsi a variabili non importanti.

+1

geez che è stato veloce! :) Grazie! – Joel

+2

Tranne quando si riferisce a qualcosa in 'gettext', o è usato come variabile tally nel REPL. –

+0

@Ignacio Vazquez-Abrams, l'uso di "_" come non mi interessa nell'assegnazione è un idioma diffuso (poco documentato), causa un conflitto con gettext? – smci

9

Un altro modo è ovviamente a=numbers()[0], se non si desidera dichiarare un'altra variabile. Detto questo, generalmente uso me stesso.

0

Il modo in cui lo faccio:

a = numbers()[0] 

Visto che il tipo restituito è una tupla, è possibile accedervi tramite indice.

Questa soluzione evita di dover dichiarare variabili inutilizzate/prive di significato come "_". La maggior parte delle persone non si occupa delle variabili inutilizzate, tuttavia il mio puntatore è impostato per avvertirmi di cose che potrebbero indicare codice potenzialmente inutilizzato, ecc.