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

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

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
  • python преобразует строку в оператор
  • возможно ли что-либо вернуть из функции в python?
  • Запустите функцию PowerShell из скрипта Python
  • Возврат функции Python
  • def anti_vowel - codecademy (python)
  • Основная функция Python не работает
  • Как указать, что функция ожидает функцию в качестве параметра или возвращает функцию через аннотации функций?
  • Основное объяснение функций python
  • Функции NameError
  • Изменение списка в python путем передачи его функции
  • Python - лучший язык программирования в мире.