2009-09-13 4 views
26

Sto usando una funzione di libreria chiamata get_count_and_price che restituisce una tupla di 2 (conteggio, prezzo). In molti posti uso sia il tempo che il prezzo. Tuttavia, in alcuni ho solo bisogno di tempo o prezzo. Quindi adesso, se ho solo bisogno di contare, lo assegno a (contare, prezzo) e lasciare il prezzo inutilizzato.In python, esiste un equivalente "pass" per l'assegnazione di una variabile

Questo funziona benissimo e non crea problemi di per sé.

Tuttavia ...

Io uso Eclipse con PyDev, e la nuova versione 1.5 mostra automaticamente gli errori e gli avvisi. Uno degli avvertimenti che mostra sono variabili inutilizzate. Nell'esempio precedente, contrassegna il prezzo come non utilizzato. Questo è il tipo di comportamento che è grande e apprezzo molto PyDev che fa questo per me. Tuttavia, vorrei saltare l'incarico al prezzo del tutto. Idealmente, vorrei qualcosa del tipo:

(count,None) = get_count_and_price() 

Ora come tutti sappiamo, Nessuno non può essere assegnato a. C'è qualcos'altro che potrei fare in questo caso?

So che potrei fare qualcosa di simile

count = get_count_and_price()[0] 

ma mi chiedo solo per vedere se qualcuno ha qualche suggerimento migliore.

risposta

29

Penso che non ci sia niente di sbagliato nell'usare l'indice [0], ma a volte le persone usano la variabile "throwaway" _. In realtà è proprio come qualsiasi altra variabile (con un uso speciale nella console), tranne per il fatto che alcuni utenti di Python hanno deciso di renderlo "throwaway" come una convenzione.

count, _ = get_count_and_price() 

Informazioni sul problema PyDev, dovresti comunque utilizzare comunque l'indice [0]. Ma se vuoi davvero usare _ l'unica soluzione è disabilitare gli avvisi di variabili inutilizzate se ti infastidisce.

+7

sii cauto. Ricorda che in un interprete python interattivo, '_' ha un significato speciale, e assegnando ad esso toglie quella magia. – SingleNegationElimination

+0

@TokenMacGuy: sì, lo so, ho scritto a riguardo in una domanda simile qui http://stackoverflow.com/questions/818828/is-it-possibile-per-implementare-a-python-for-range-loop-without -aneratore-variabile/818836 # 818836 – Unknown

+6

Anche Haskell ed Erlang usano _ come variabile "throwaway". –

3

Spesso lo facciamo.

count, _ = get_count_and_price() 

o questo

count, junk = get_count_and_price() 
7

Se si va al Eclipse -> Preferenze ... finestra, si può effettivamente specificare quali nomi variabile PyDev deve ignorare se sono inutilizzati (sto guardando il più recente PyDev 1.5.X).

Se vai a PyDev -> Editor -> analisi del codice e guardare l'ultimo campo che dice "Non riportare variabile inutilizzata se il nome inizia con"

inserire qualsiasi nomi che si desidera in là e quindi utilizzare quel nome per limitare i nomi delle variabili che PyDev ignorerà per gli avvertimenti inutilizzati.

Per impostazione predefinita, sembra che PyDev nasconderà gli avvisi di variabili inutilizzate per qualsiasi variabile che abbia nomi che iniziano con "dummy", "_" o "inutilizzato".

Come detto in seguito da @TokenMacGuy, mi raccomando di non usare solo "_" perché ha un significato speciale in alcuni scenari in Python (in particolare è usato nell'interprete interattivo).

+0

Mentre fai un buon punto su '_' che ha un significato speciale in l'interprete, la mia impressione è che è abbastanza ampiamente inteso per avere un significato speciale diverso (se solo per convenzione) nel codice scritto. –

20

L'utilizzo di _ come proposto separatamente potrebbe presentare alcuni problemi (sebbene sia in gran parte OK).In base alle linee guida in stile Python che usiamo al lavoro, normalmente utilizzo count, unused_price = ... poiché pylint è configurato per ignorare le assegnazioni ai nomi a barre a partire da unused_ (e avvisare invece dell'USO di un tale nome di barile!). Ma non so come istruire PyDev a comportarsi in questo modo!

+3

Ho appena aggiornato a PyDev 2.2.2 e sembra che ora riconosca la convenzione 'unused_' per impostazione predefinita e non dia alcun avviso – Jonathan

2

Preferirei nominarlo _price invece, per questi motivi:

  • risolve il conflitto con gettext e il prompt interattivo, che entrambi utilizzano _

  • E 'facile cambiare nuovamente dentro price se ne hai bisogno dopo.

  • Come altri hanno sottolineato, la sottolineatura principale ha già una connotazione di "interno" o "inutilizzato" in molte lingue.

Così il vostro codice finirebbe per assomigliare a questo:

(count, _price) = get_count_and_price() 
1

andrò dopo un distintivo Negromante. :)

Hai detto che stai usando PyDev. In PyDev (almeno versioni recenti - non ho controllato fino a che punto), qualsiasi nome di variabile che inizia con "inutilizzato" sarà esentato dall'avviso Variabile inutilizzata. Altri strumenti di analisi statica potrebbero comunque lamentarsi (i fiocchi di neve lo fanno, ma sembra ignorare comunque questo avvertimento in un contesto tuple-disimballo).