Ayuda para definir nombres globales

Mi código:

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

Cuando B () se ingresa en el interpeter obtengo

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

¿Cómo debo ir definiendo un? Quiero que el resultado final sea ‘A in B’, cuando B () se ingresa al intérprete

Edición: me gustaría mantener la definición de a dentro de A () si es posible.

Soy bastante nuevo en Python y es posible que desee tomar esto con un grano de sal, pero ¿consideró que su variable a y las funciones A () y B () son miembros de una clase?

 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() 

Cuando guardo el código anterior en un archivo y lo ejecuto, parece funcionar como se esperaba.

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

esto imprime:

 A A in B 

Por cierto: nunca necesitas un “retorno” sencillo al final de una función.

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

Puedes hacer esto usando la palabra clave global :

 def A(): global a a = 'A' def B(): global a # ... 

Sin embargo, el uso de variables globales generalmente es una mala idea . ¿Está seguro de que no hay una mejor manera de hacer lo que quiere hacer?

Echa un vistazo a mi respuesta de esta pregunta SO . Básicamente:

Cree un nuevo módulo que contenga solo datos globales (en su caso, digamos myGlobals.py ):

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

y luego cada archivo que desee tener acceso a estos datos puede hacerlo de esta manera:

 import myGlobals myGlobals.a = 'something' 

así que en tu caso:

 import myGlobals def A(): myGlobals.a = 'A' print myGlobals.a def B(): print myGlobals.a + ' in B' 

Simplemente escriba así, no es necesario crear fuction o clase:

 global a a = 'A' print a print a + ' in B'