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

У меня есть функция, которую я вызываю из модуля. Внутри функции две переменные, которые я пытаюсь получить, становятся глобальными. Когда я запускаю модуль в 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' 
  • Преобразование строки Python DateTime в целые миллисекунды
  • Проблемы с установкой lxml в Ubuntu
  • Удаление символов unicode \ u2026 в строке в python2.7
  • Определение того, сколько раз подстрока встречается в строке в Python
  • Сравнение значений в двух списках в Python
  • Почему сортировка списка кортежей python происходит быстрее, когда я явно предоставляю ключ в качестве первого элемента?
  • mysql для python 2. 7 говорит, что Python v2.7 не найден
  • Как наложить данные в течение «дневного периода» в Pandas для печати
  •  
    Interesting Posts for Van-Lav

    Использовать протоколирование распечатать вывод pprint

    Продолжение в Python unittest, когда утверждение не выполняется

    Можно ли загрузить apk из Google Play программно на ПК?

    Сделайте Emacs использовать UTF-8 с интерактивным режимом Python

    Должен ли я кэшировать результаты диапазона, если я их повторно использую?

    Загрузка локального файла с клиента на распределенный кластер dask

    Дата клещей и вращение в matplotlib

    Как я могу превратить список в массив в python?

    n-наибольшие элементы в последовательности (необходимо сохранить дубликаты)

    Обнаружить версию python в сценарии оболочки

    Получение большого списка существительных (или прилагательных) в Python с помощью NLTK; или Python Mad Libs

    Неверное значение в matplotlib yticks

    Невозможно загрузить целевой WSGI-скрипт в качестве модуля Python

    Python – строка кодирования – шведские буквы

    Как добавить дополнительный столбец в массив numpy

    Python - лучший язык программирования в мире.