Функция не меняет глобальную переменную

мой код выглядит следующим образом:

done = False def function(): for loop: code if not comply: done = True #let's say that the code enters this if-statement while done == False: function() 

По какой-то причине, когда мой код входит в оператор if, он не выходит из цикла while после выполнения функции ().

НО, если я закодирую это так:

 done = False while done == False: for loop: code if not comply: done = True #let's say that the code enters this if-statement 

… он выходит из цикла while. Что тут происходит?

Я убедился, что мой код входит в оператор if. Я еще не запускал отладчик, потому что у моего кода много циклов (довольно большой 2D-массив), и я отказался от отладки из-за того, что он был настолько утомительным. Почему «сделано» не изменяется, когда оно находится в функции?

  • (n) проклятия pad в python не работает
  • Может ли argpse в python 2.7 потребовать минимум двух аргументов?
  • Как конвертировать python datetime.datetime, чтобы увеличить серийный номер даты
  • WebScraping с BeautifulSoup или LXML.HTML
  • Рекомендации по написанию быстрого кода для JIT PyPy
  • подпрограммы argparse с вложенными пространствами имен
  • Как использовать колбу-sqlalchemy с существующей моделью sqlalchemy?
  • Почему не os.path.join использовать os.path.sep или os.sep?
  • 3 Solutions collect form web for “Функция не меняет глобальную переменную”

    Ваша проблема в том, что функции создают собственное пространство имен, а это значит, что done внутри функции отличается от второго, чем во втором. Использовать global done для использования первого, а не для создания нового.

     def function(): global done for loop: code if not comply: done = True 

    Объяснение того, как использовать global можно найти здесь.

     done=False def function(): global done for loop: code if not comply: done = True 

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

    Используйте global , только тогда вы можете изменить глобальную переменную, иначе оператор, такой как done = True внутри функции, объявит новую локальную переменную с именем done :

     done = False def function(): global done for loop: code if not comply: done = True 

    Подробнее о глобальном заявлении .

    Interesting Posts

    Ошибка 404 в django при посещении / Runserver не возвращает ошибок, хотя

    Безопасное хранение паролей для использования в скрипте python

    Включение вывода отладки для python 3 urllib

    Вопрос Django {% if forloop.first%}

    Проблемы с использованием модели пользователя в модульных тестах django

    Перенаправление stdout и stderr в PyQt4 QTextEdit из вторичного потока

    Сколько накладных расходов делают декораторы для вызова функций Python

    Инвертировать colormap в matplotlib

    Python с использованием метода basicConfig для входа в консоль и файл

    Согласование регулярных выражений Objective-C / Swift по нескольким линиям

    numpy.void type – как его использовать?

    некоторые журналы django отсутствуют, когда хост в uwsgi с несколькими процессами

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

    Извлечение выделенных столбцов из таблицы с помощью BeautifulSoup

    Как получить значение из переменной тензора anano, поддерживаемой общей переменной?

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