Доступ к глобальным переменным из функции в импортированном модуле

У меня есть функция, которую я вызываю из модуля. Внутри функции две переменные, которые я пытаюсь получить, становятся глобальными. Когда я запускаю модуль в IDLE сам по себе, я могу получить доступ к переменным после завершения функции, как и ожидалось. Когда я вызываю функцию в коде, в который я импортировал модуль, я не могу получить доступ к переменным.

#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? ")) 

Выход, когда я запускаю его сам по себе.

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

И код, в который его импортировать.

 import name_age name_age.globaltest() 

но когда я запускаю попытку доступа к переменным в коде, где я его импортировал.

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

Как сделать переменную global в коде, где я импортировал модуль или получить доступ к переменным «имя» или «возраст» в этой функции.

2 Solutions collect form web for “Доступ к глобальным переменным из функции в импортированном модуле”

Простой ответ – «не надо». «Глобалы» Python – это только глобальные глобулы на уровне модулей, и даже глобальные глобулы на уровне модулей (изменяемые глобальные глобальные уровни) следует избегать как можно больше, и их очень мало.

Правильное решение – научиться правильно использовать параметры функции и возвращаемые значения. В вашем случае первый подход будет

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

а потом:

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

Просто измените свой оператор import на этот:

 from name_age import * 

пример:

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

В противном случае, если вы хотите использовать оператор import name_age , вам необходимо получить доступ к своим global переменным с помощью ссылки на имя модуля, то есть:

пример:

 In [1]: import name_age In [2]: print name_age.name Out[2]: 'tom' 
  • matplotlib: изменить текущий экземпляр оси (т.е. gca ())
  • Python Pandas Dataframe добавляет строки
  • Как использовать запросы Модуль Python для создания завихренных вызовов
  • Приложение Python Flask невозможно получить с помощью удаленных компьютеров в сети
  • Сравнение значений в двух списках в Python
  • Абсолютный импорт в python не работает, относительная импортная работа
  • перечислить модули как строки и импортировать их
  • что случилось b = a в python?
  • Веб-приложение запускается много раз - web.py
  • Как напечатать отрицательный ноль в Python
  • Встроенный python __import__ vs imp.load_module: ValueError: Попытка относительного импорта за пределы пакета overplevel
  • Python - лучший язык программирования в мире.