_
è una variabile speciale nell'interprete, è sempre assegnata al risultato dell'espressione precedente. Quindi, non puoi usarlo in questo modo.
BTW il problema sembra essere correlato a IPython guscio, perché il codice funziona bene nel normale shell Python:
Nel normale shell Python quando si assegna nulla alla variabile _
allora rimarrò assegnata a quell'oggetto solo, e perde il suo comportamento speciale.
shell Python:
>>> 2*2
4
>>> _ #works as expected
4
>>> _ = 2 #after assignment, it's magic functionality is gone
>>> _*5
10
>>> _
2
IPython shell:
In IPython _
comporta diversamente rispetto shell pitone _
; anche se lo si assegna ad alcune variabili, anche questo verrà aggiornato non appena si eseguono dei calcoli.
In [1]: 2*2
Out[1]: 4
In [2]: _
Out[2]: 4
In [3]: _ = 10
In [4]: _*10
Out[4]: 100
In [5]: _
Out[5]: 100
Da docs di IPython:
Il seguente esistono sempre le variabili globali (in modo da non sovrascrivere loro!):
_: (un singolo trattino basso): negozi output precedente, come l'interprete predefinito di Python . ..
Da pitone docs:
L'identificatore speciale _
viene utilizzato nell'interprete interattivo per negozio il risultato dell'ultima valutazione; è memorizzato nel modulo __builtin__
. Quando non è in modalità interattiva, _
non ha alcun significato speciale e non è definito.
Nota: Il nome _
è spesso usato in congiunzione con l'internazionalizzazione; fare riferimento alla documentazione per il modulo gettext per ulteriori informazioni su questa convenzione.
fonte
2013-07-10 20:30:06
Possibile duplicato di [Mercurial/Python - Cosa fa la funzione Underscore?] (Http://stackoverflow.com/questions/3077227/mercurial-python-what-does-the-underscore-function-do) – dimo414
@ dimo414: No, questo * non * è un duplicato di quella domanda. Tocco su quell'uso della funzione di sottolineatura nella mia risposta, ma questo è ** non ** ciò che l'OP sta chiedendo. Questo è il motivo per cui l'interprete interattivo Python ha assegnato qualcos'altro a '_'. –
Hai ragione, ho capito che dopo aver postato il possibile duplicato. Dal momento che non possiamo [annullare un voto per chiudere] (http://meta.stackexchange.com/questions/915/can-we-have-the-ability-to-rescind-a-close-vote-before-it -close) Ho pensato che fosse più informativo lasciare il riferimento (le persone certamente potrebbero atterrare su questa pagina cercando una risposta alla domanda collegata, dopotutto) che rimuovere il commento. – dimo414