Как изменить переменную функции вложенности в вложенной функции

Я бы хотел, чтобы переменная, определенная в функции вложенности, была изменена во вложенной функции, что-то вроде

def nesting(): count = 0 def nested(): count += 1 for i in range(10): nested() print count 

Когда вызывается функция вложенности, я хочу, чтобы она печатала 10, но она вызывает UnboundLocalError. Ключевое слово global может решить это. Но поскольку количество переменных используется только в области функции вложенности, я ожидаю, что не объявим его глобальным. Каков хороший способ сделать это?

3 Solutions collect form web for “Как изменить переменную функции вложенности в вложенной функции”

В Python 3.x вы можете использовать nonlocal объявление (в nested ), чтобы указать Python, который вы хотите присвоить переменной count в nesting .

В Python 2.x вы просто не можете назначить count при nesting из nested . Однако вы можете обойти это, не присваивая самой переменной, но используя изменяемый контейнер:

 def nesting(): count = [0] def nested(): count[0] += 1 for i in range(10): nested() print count[0] 

Хотя для нетривиальных случаев обычный подход Python состоит в том, чтобы обернуть данные и функциональные возможности в классе, а не использовать закрытие.

Немного поздно, вы можете прикрепить атрибут к функции «вложенности» следующим образом:

 def nesting(): def nested(): nested.count += 1 nested.count = 0 for i in range(10): nested() return nested c = nesting() print(c.count) 

Самый элегантный подход для меня: работает на 100% на обеих версиях python.

 def ex8(): ex8.var = 'foo' def inner(): ex8.var = 'bar' print 'inside inner, ex8.var is ', ex8.var inner() print 'inside outer function, ex8.var is ', ex8.var ex8() inside inner, ex8.var is bar inside outer function, ex8.var is bar 

Подробнее: http://www.saltycrane.com/blog/2008/01/python-variable-scope-notes/

  • Что предпочтительнее использовать в Python: лямбда-функции или вложенные функции ('def')?
  • Что значит «вызывать» функцию в Python?
  • Передать дескриптор файла функции cython
  • Функции Python с несколькими скобками параметров
  • Почему эта функция def не выполняется в Python?
  • Насколько велика может быть входная функция input ()?
  • аргумент функции распаковки
  • Как написать одноименные методы с разными параметрами в python
  •  
    Interesting Posts for Van-Lav

    Как сделать шоколадный вариант установки python2 в пользовательский путь?

    Как получить аргументы параметров из замороженного дистрибутива spicy.stats?

    Нормализация временных рядов по событию

    Остановка супервайзера не останавливает работников сельдерея

    Sklearn set_params принимает ровно 1 аргумент?

    Преодоление «недостатков» неизменяемости строк

    Приложение с флягой GET возвращает то же самое дважды

    SQLAlchemy Логическое значение этого предложения не определено

    как выпустить «show dbs» из pymongo

    Как я могу получить Python для поиска ffprobe?

    лучший способ реализации пользовательских принтеров

    Использование PIL-модификации, а затем сохранение TIFF возвращает ошибку

    Используйте дескриптор (EDIT: Не один декоратор) для нескольких атрибутов?

    конвертировать winsound в платформу linux?

    Как рассчитать количество раз, когда слово имеет место в предложении? (Python)

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