Доступ к переменной из определенной функции в цикле while
У меня есть код, похожий на этот
v = '0' def program(): x = input('1 or 2 ') if x == '1': print('it is 1') v = '1' elif x == '2': print('it is 2') v = '2' while True: program() print(v)
Однако, когда я запускаю этот код, переменная 'v' всегда выводит значение по умолчанию 0. Почему он не дает мне переменную, которую я назначил ей в функции?
- как настроить простую архитектуру микросервисов в приложении
- Python преобразует двойные кавычки в одинарные кавычки в новую переменную
- Что такое выражение «выход» в функции?
- Python urllib2: Чтение содержимого тела даже во время исключения HTTPError?
- Python разделяет строку на «,», но желаемый контент также имеет «,» внутри
У вас есть две переменные с именем v
:
- Объявление верхнего уровня
v=0
вверху. - Объявление функции
v
в программе.
Прежде всего, вы действительно не должны использовать глобальные функции в функциях, так как это плохая практика программирования. Вы должны передать его как параметр и вернуться с любыми другими результатами.
Если вам действительно нужно, вы можете изменить глобальную переменную в функции, сначала объявив ее глобальной переменной.
Также обратите внимание, что вам нужно использовать raw_input
в Python 2.
def program(): global v x = raw_input('1 or 2 ') if x == '1': print('it is 1') v = '1' elif x == '2': print('it is 2') v = '2'
Использование глобальных переменных в функции, отличной от той, которая их создала
Ваша функция управляет локальной копией переменной v
. Если вы хотите получить значение v после вызова program()
, добавьте return v
в конец определения функции. То есть:
v = '0' def program(): x = input('1 or 2 ') if x == '1': print('it is 1') v = '1' elif x == '2': print('it is 2') v = '2' return v while True: v = program() print(v)
Если вы ничего не хотите возвращать, вы можете установить v
на глобально объявленную переменную так:
v = '0' def program(): x = input('1 or 2 ') if x == '1': print('it is 1') global v v = '1' elif x == '2': print('it is 2') global v v = '2' while True: program() print(v)
В дополнение к дубликатному флагом, вот объяснение в отношении вашего кода:
Вам нужно явно указать вашему методу, что вы хотите использовать глобальный v
, иначе он никогда не будет обновляться из того, что происходит с v
пределах области метода.
Чтобы исправить это, вы хотите добавить global v
внутри своего метода:
def program(): global v # rest of your code here
Это должно сработать.
Переменные назначения в Python локально ограничены. Если вы хотите манипулировать глобальным состоянием (или охватывающим состоянием) внутри функции, вы можете обернуть это состояние в держатель, а затем обратиться к держателю. Например:
v = ['0'] def program(): x = input('1 or 2 ') if x == '1': print('it is 1') v[0] = '1' elif x == '2': print('it is 2') v[0] = '2' while True: program() print(v[0])
Вышеупомянутый сегмент ссылается на массив и манипулирует значением внутри массива.
- Как проверить, какая база данных используется в проекте DJango
- Может ли «с» использоваться как идентификатор в Python?
- Программный метрический инструмент для Python
- Заменить строку без модуля python re?
- Как заставить PyCharm 3.0 добавить пространство после блока комментариев или строки
- Как я могу использовать скрипт в подпапках на gae?
- Отображение значения словаря в списке
- Celery autodiscover_tasks не работает для всех приложений Django 1.7
- Самый быстрый способ округления до ближайших 5 / 100ths
- отображение значения списка внутри словаря внутри списка
- как запустить pip для python 3 и python 2