Acceder a variables globales desde una función en un módulo importado.

Tengo una función que estoy llamando desde el módulo. Dentro de la función, las dos variables a las que estoy tratando de acceder se hacen globales. Cuando ejecuto el módulo en IDLE por sí mismo, todavía puedo acceder a las variables después de que la función finalice, como se esperaba. Cuando llamo a la función en el código en el que he importado el módulo, no puedo acceder a las variables.

#module to be imported def globaltest(): global name global age name = str(raw_input("What is your name? ")) age = int(raw_input("What is your age? ")) 

La salida cuando lo ejecuto por sí mismo.

 >>> globaltest() What is your name? tom What is your age? 16 >>> name 'tom' >>> age 16 

Y el código donde lo importamos.

 import name_age name_age.globaltest() 

pero cuando ejecuto bash acceder a las variables en el código donde lo he importado.

 What is your name? tom What is your age? 16 >>> name Traceback (most recent call last): File "", line 1, in  name NameError: name 'name' is not defined >>> 

¿Cómo puedo hacer que la variable sea global en el código donde he importado el módulo o acceder a las variables ‘nombre’ o ‘edad’ en la función?

La respuesta simple es “no hacer”. Las “globales” de Python son solo globales a nivel de módulo, e incluso las globales a nivel de módulo (las globales a nivel de módulo mutables) deben evitarse tanto como sea posible, y hay muy pocas razones para usar una.

La solución correcta es aprender a usar correctamente los parámetros de función y los valores de retorno. En su caso sería un primer acercamiento.

 #module.py def noglobaltest(): name = str(raw_input("What is your name? ")) age = int(raw_input("What is your age? ")) return name, age 

y entonces:

 from module import noglobaltest name, age = noglobaltest() print "name :", name, "age :", age 

Solo cambia tu statement de import a esta:

 from name_age import * 

ejemplo:

 In [1]: from name_age import * In [2]: print name Out[2]: 'tom' 

De lo contrario, si desea utilizar la statement import name_age , debe acceder a sus variables global través de la referencia del nombre del módulo, que es:

ejemplo:

 In [1]: import name_age In [2]: print name_age.name Out[2]: 'tom'