В 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 заключается в переноседанные и функциональность в классе, а не с использованием замыканий.