2010-08-29 3 views
1

Mon code:Aide Définir les noms globaux

def A(): 
    a = 'A' 

    print a 

    return 

def B(): 

    print a + ' in B' 

    return 

Lorsque B() est entré dans le interpeter je reçois

Traceback (most recent call last): 
    File "<interactive input>", line 1, in <module> 
    File "<module1>", line 9, in B 
NameError: global name 'a' is not defined 

Comment dois-je aller sur la définition d'un? Je veux que le résultat final soit 'A dans B', quand B() est entré dans l'interpréteur

éditer: Je voudrais garder la définition de a dans A() si possible.

Répondre

2

je suis Python est nouveau et vous voudrez peut-être prendre le suivant avec un grain de sel, mais avez-vous considéré votre variable a et les fonctions A() et B() comme membres d'une classe?

class myClass(object): 

    def __init__(self): 
     self.a = '' 

    def A(self): 
     self.a = 'A' 
     print self.a 

    def B(self): 
     print self.a + ' in B' 


def main(): 
    stuff = myClass() 
    stuff.A() 
    stuff.B() 

if __name__ == '__main__': 
    main() 

Lorsque je sauvegarde le code ci-dessus dans un fichier et l'exécute, il semble fonctionner comme prévu. Tout comme le type

2
def A(): 
    global a 
    a = 'A' 
    print a 

def B(): 
    global a 
    print a + ' in B' 

A() 
B() 

cette impression:

A 
A in B 

BTW: Vous ne ont besoin d'un simple "retour" à la fin d'une fonction.

0
a = 'A'  
def B():  
    print a + ' in B' 
+0

Je voudrais garder la définition d'un au sein de A() si possible. – rectangletangle

0

Vous pouvez le faire en utilisant le global mot-clé:

def A(): 
    global a 
    a = 'A' 

def B(): 
    global a 
    # ... 

Cependant, l'utilisation des variables globales est généralement une mauvaise idée - êtes-vous sûr qu'il n'y a pas une meilleure façon de faire ce que vous voulez faire?

+0

Pour une raison quelconque, cela ne fonctionne pas, je reçois le même nom erreur. – rectangletangle

0

consultez ma réponse de this SO question. En gros:

Créer un nouveau module contenant des données uniquement globales (dans votre cas, disons myGlobals.py):

# create an instance of some data you want to share across modules 
a=0 

puis chaque fichier que vous voulez avoir accès à ces données peuvent le faire de cette façon:

import myGlobals 

myGlobals.a = 'something' 

donc dans votre cas:

import myGlobals 

def A(): 
    myGlobals.a = 'A' 
    print myGlobals.a 

def B(): 
    print myGlobals.a + ' in B' 
-1

cela, pas besoin de créer auj ou classe:

global a 

a = 'A' 

print a 

print a + ' in B' 
Questions connexes