Глобалы и когда они должны быть объявлены - PullRequest
1 голос
/ 20 октября 2019

В следующем коде:

>>> import time
>>> cache = {}
>>> 
>>> def squared(num):
...     if num in cache: return cache[num]
...     print ("Calculating...")
...     time.sleep(1) # fake a calculation
...     result = num * num
...     cache[num] = result
...     return result
... 
>>> squared(2)
Calculating...
4
>>> squared(2)
4
>>> cache
{2: 4}

Почему я могу изменить cache внутри функции и не вызывать global в функции? global напрямую связано с тем, является ли переменная изменяемой / неизменной или почему она работает в приведенном выше случае?

1 Ответ

1 голос
/ 20 октября 2019

Ваша функция видит внешнюю переменную кэша. Поскольку он является изменяемым, он может изменять его, и его можно увидеть как внутри, так и вне функции.

Вам нужно будет использовать global, если вы хотите присвоить новое значение имени и хотите такжевнешнее имя, которое будет связано с этим значением. Например, если вы хотите присвоить 3 имени «кеш», вы используете cache = 3. Если вы не объявите его как глобальный, это будет простая локальная переменная внутри функции, а имя внешнего кэша будет по-прежнему привязано к исходному значению.

...