Short:
Вы пытаетесь изменить значение curr_length
с помощью curr_length = len(str_)
внутри функции, которая ищет локальную переменную curr_length
и не может ее найти.Чтобы узнать, что это переменная global
, нужна строка global curr_length
.
Если вам интересно, почему объекту dict
не нужна строка global memoized
, вы должны прочитать ответ на: Глобальным словарям не нужно ключевое слово global для измененияих? или Почему глобальное ключевое слово не требуется в этом случае?
ОБЪЯСНЕНИЕ:
В Python переменная, объявленная вне функции или в глобальномобласть действия известна как глобальная переменная.Это означает, что глобальная переменная может быть доступна внутри или снаружи функции.
Давайте рассмотрим пример создания глобальной переменной в Python.
x = "global"
def foo():
print("x inside :", x)
foo()
print("x outside:", x)
Когда мы запускаем код,будет:
x inside : global
x outside: global
В приведенном выше коде мы создали x как глобальную переменную и определили foo () для печати глобальной переменной x.Наконец, мы вызываем функцию foo (), которая выведет значение x.
Что если вы хотите изменить значение x внутри функции?
def foo():
x = x * 2
print(x)
foo()
Когда мы запустим код,будет вывод:
UnboundLocalError: local variable 'x' referenced before assignment
Вывод показывает ошибку, потому что Python обрабатывает x как локальную переменную и x также не определен внутри foo ().
Чтобы сделать это, мы используем global ключевое слово