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

ok suivi, comment puis-je faire référence à l'extérieur x ? –

+0

wow, quelqu'un a répondu qu'avant de le demander :) –

+0

Remplacez maintenant 'x = True' par' x = [1] ', et remplacez x = False' par' x [0] = 2' et réexécutez votre code .. –

Répondre

18

Vous n'avez pas besoin de déclarer une variable fonction-locale en Python. Le "x = False" fait référence à un x local à stupid(). Si vous voulez vraiment modifier les x globales à l'intérieur stupide:

def stupid(): 
    global x 
    x=False 
+8

Notez que si vous avez fait 'print x' dans la fonction, vous utiliserez le' x' global. C'est seulement * assignment * qui crée la nouvelle variable locale. – quark

2

Le x dans la fonction stupide() est une variable locale, vous avez vraiment 2 variables nommées x.

6

Parce que la portée de x est locale à la fonction stupide(). une fois que vous appelez la fonction et qu'elle se termine, vous êtes hors de portée, et vous imprimez la valeur de "x" définie en dehors de la fonction stupide() - et le x défini à l'intérieur de la fonction stupide() n'existe pas sur la pile plus (une fois que la fonction se termine)

modifier après votre commentaire:

la extérieure x est référencé lorsque vous avez imprimé, tout comme vous l'avez fait.

le intérieur x ne peut être référencé que lorsque vous êtes dans la fonction stupide(). Vous pouvez donc imprimer à l'intérieur de cette fonction pour voir quelle est la valeur du x à l'intérieur de cette fonction.

A propos de "global"

  • cela fonctionne & répond à la question, apparemment
  • pas une bonne idée d'utiliser tout ce que souvent
  • provoque des problèmes de lisibilité et d'évolutivité (et potentiellement plus)
  • Selon votre projet, vous pouvez reconsidérer en utilisant une variable globale définie à l'intérieur d'une fonction locale.
2

Ajoutez "global x" avant x = False dans la fonction et il affichera True. Sinon, il y a deux "x", chacun dans une portée différente.

10

Pour répondre à votre question suivante, utilisez global:

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

haha ​​bonne réponse préventive. – Triptych

3

Si vous souhaitez accéder à la variable globale x à partir d'une méthode en python, vous devez le faire explicitement:

x=True 
def stupid(): 
    global x 
    x=False 

stupid() 
print x 
+0

Bizarre hoquet là-bas. :( – Stobor

2
  • Étant donné que vous effectuez une affectation à x à l'intérieur de stupid(), Python crée un nouveau x à l'intérieur de stupid().
  • Si vous ne lecture de l'intérieur xstupid(), Python serait en fait utiliser la x globale, qui est ce que vous vouliez.
  • Pour forcer Python à utiliser le x global, ajoutez global x comme première ligne à l'intérieur de stupid().
5

Si ce code est tout à l'intérieur d'une fonction que, global ne va pas travailler, car alors x ne serait pas une variable globale. Dans Python 3.x, ils ont introduit le mot-clé nonlocal, ce qui rendrait le travail de code, peu importe que ce soit au niveau supérieur ou à l'intérieur d'une fonction:

x=True 
def stupid(): 
    nonlocal x 
    x=False 
stupid() 
print x 
Questions connexes