2009-08-07 15 views
7
x=True 
def stupid(): 
    x=False 
stupid() 
print x 
+0

ok follow-up, come posso riferimento al x esterno ? –

+0

wow, qualcuno ha risposto prima che lo chiedessi :) –

+0

Adesso sostituisci 'x = True' con' x = [1] ', e sostituisci' x = False' con 'x [0] = 2' ed esegui nuovamente il tuo codice .. –

risposta

18

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 
+8

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

2

La x nella funzione stupido() è una variabile locale, in modo da realmente avere 2 variabili denominate x.

6

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.
2

Aggiungi "global x" prima di x = False nella funzione e stamperà True. Altrimenti, ci sono due "x", ognuna in un ambito diverso.

10

Per rispondere alla tua domanda successiva, utilizzare global:

x=True 
def stupid(): 
    global x 
    x=False 
stupid() 
print x 
+1

haha ​​bella risposta preventiva. – Triptych

3

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 
+0

strano singhiozzo lì. :( – Stobor

2
  • Poiché si sta eseguendo un assegnamento a stupid() all'interno di stupid(), Python crea un nuovo stupid() all'interno di stupid().
  • Se tu fossi solo lettura da x all'interno stupid(), Python sarebbe infatti utilizzare il globale x, che è quello che si voleva.
  • Per forzare Python a utilizzare lo x globale, aggiungere global x come prima riga all'interno di stupid().
5

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 
Problemi correlati