Следующая функция закрытия отлично работает в javascript.
function generateNextNumber(startNumber) {
var current = startNumber;
return function(){
return current += 1;
}
}
var getNextNumber = generateNextNumber(10);
for (var i = 0; i < 10; i++) {
console.log(getNextNumber());
}
Я попытался сделать то же самое в Python
def generateNextNumber(startNumber):
current = startNumber
def tempFunction():
current += 1
return current
return tempFunction
getNextNumber = generateNextNumber(10)
for i in range(10):
print (getNextNumber())
Я получаю следующую ошибку
Traceback (most recent call last):
File "/home/thefourtheye/Desktop/Test1.py", line 10, in <module>
print (getNextNumber())
File "/home/thefourtheye/Desktop/Test1.py", line 4, in tempFunction
current += 1
UnboundLocalError: local variable 'current' referenced before assignment
Когда я напечатал vars()
и locals()
внутри tempFunction
, они подтверждают, что присутствует current
.
({'current': 10}, {'current': 10})
Но когда я немного изменил программу
def generateNextNumber(startNumber):
current = {"Number" : startNumber}
def tempFunction():
current["Number"] += 1
return current["Number"]
return tempFunction
он работает. Я не могу объяснить, почему это работает. Может кто-нибудь объяснить пожалуйста?