x=True
def stupid():
x=False
stupid()
print x
risposta
Non è necessario dichiarare una variabile locale della funzione in Python. "X = False" si riferisce a x local to stupid(). Se davvero si vuole modificare le x globali all'interno stupido:
def stupid():
global x
x=False
Nota che se hai fatto il comando 'print x' all'interno della funzione userebbe il globale' x'. È solo * assegnazione * che crea la nuova variabile locale. – quark
La x nella funzione stupido() è una variabile locale, in modo da realmente avere 2 variabili denominate x.
Poiché l'ambito di x è locale rispetto alla funzione stupido(). una volta che chiami la funzione, e finisce, sei fuori dal suo ambito, e stampi il valore di "x" che è definito al di fuori della funzione stupido() - e, la x che è definita all'interno di di funzione stupida() non esiste nello stack più (una volta che la funzione si conclude)
modificare dopo il tuo commento:
il esterno x viene fatto riferimento quando si è stampato, proprio come hai fatto tu.
il interno x può essere referenziato solo mentre all'interno della funzione stupido(). in modo che tu possa stampare all'interno di quella funzione in modo da vedere quale valore contiene la x all'interno di essa.
A proposito di "globale"
- funziona & risponde alla domanda, a quanto pare non
- una buona idea di utilizzare tutto ciò che spesso problemi
- cause di leggibilità e scalabilità (e potenzialmente più)
- a seconda del progetto, è possibile riconsiderare l'utilizzo di una variabile globale definita all'interno di una funzione locale.
Aggiungi "global x" prima di x = False nella funzione e stamperà True. Altrimenti, ci sono due "x", ognuna in un ambito diverso.
Per rispondere alla tua domanda successiva, utilizzare global
:
x=True
def stupid():
global x
x=False
stupid()
print x
haha bella risposta preventiva. – Triptych
Se si desidera accedere alla variabile x globale da un metodo in python, è necessario fare in modo esplicito:
x=True
def stupid():
global x
x=False
stupid()
print x
strano singhiozzo lì. :( – Stobor
- Poiché si sta eseguendo un assegnamento a
stupid()
all'interno distupid()
, Python crea un nuovostupid()
all'interno distupid()
. - Se tu fossi solo lettura da
x
all'internostupid()
, Python sarebbe infatti utilizzare il globalex
, che è quello che si voleva. - Per forzare Python a utilizzare lo
x
globale, aggiungereglobal x
come prima riga all'interno distupid()
.
Se quel codice è tutto all'interno di una funzione, però, global
non è andare a lavorare, perché allora x
non sarebbe una variabile globale. In Python 3.x, hanno introdotto la parola chiave nonlocal
, che renderebbe il codice di lavoro indipendentemente dal fatto che è al livello superiore o all'interno di una funzione:
x=True
def stupid():
nonlocal x
x=False
stupid()
print x
- 1. Perché console.log (true, '\ t') stampa true "\t"?
- 2. perché questo programma python non funziona?
- 3. Perché questo programma in C stampa caratteri strani in uscita?
- 4. Perché questo programma emette 64?
- 5. Perché questo programma è valido?
- 6. Perché questo codice stampa solo 42?
- 7. Perché (true && 1) restituisce 1, ma (1 && true) restituisce true?
- 8. Perché questo programma PHP non funziona?
- 9. Perché questo programma non è ottimizzato?
- 10. Perché questo programma continua a arrestarsi
- 11. Perché questo programma va in loop infinito?
- 12. Perché questo programma equivalente non viene compilato?
- 13. Perché `object()> 0` True in Python?
- 14. Perché posso assegnare True = False (Python 2.7.9)
- 15. Perché questo semplice programma push/pop Perl non funziona?
- 16. Perché l'output di questo programma cambia a 130?
- 17. Questo programma Java stampa sempre solo 10 ma non stampa SB.Perché?
- 18. perché lua string.find restituisce true per questo test case?
- 19. Il seguente codice stampa "true, true, false, true". Non dovrebbe essere "vero, vero, vero, vero"?
- 20. Perché la stampa di Python 'None' nell'output?
- 21. Perché questo programma di Rust non si blocca?
- 22. Stampa python output tkinter
- 23. string "==" in java controlla il riferimento, perché questo codice restituisce true?
- 24. Perché questo metodo Python perde memoria?
- 25. Python: perché isinstance può restituire False, quando dovrebbe restituire True?
- 26. Perché $ ((true == false)) valuta 1 in bash?
- 27. Perché il test dell'unità non funziona in questo programma D?
- 28. Perché questo semplice programma CoreMIDI non produce output MIDI?
- 29. Perché questo programma non riesce a rilevare un'eccezione?
- 30. Perché questo programma Haskell perde spazio quando compilato con ottimizzazioni?
ok follow-up, come posso riferimento al x esterno ? –
wow, qualcuno ha risposto prima che lo chiedessi :) –
Adesso sostituisci 'x = True' con' x = [1] ', e sostituisci' x = False' con 'x [0] = 2' ed esegui nuovamente il tuo codice .. –