Функции и области видимости: продолжение
Начнем с проверки, видна ли внутри функции переменная, созданная вне какой-либо функции. Другими словами, распространяется ли имя переменной в тело функции?
Посмотрите код в редакторе. Наша морская свинка тут.
Результат проверки положительный - код выводит:
Do I know that variable? 1
1
вывод
Ответ: переменная, существующая вне функции, имеет область видимости внутри тела функции.
Из этого правила есть очень важное исключение. Попробуем его найти.
Внесем небольшие изменения в код:
def my_function():
var = 2
print("Do I know that variable?", var)
var = 1
my_function()
print(var)
Результат тоже изменился - теперь код выдаёт немного другой результат:
Do I know that variable? 2
1
output
Что произошло?
- переменная
var
, созданная внутри функции, отличается от той, которая была определена вне ее - кажется, что существуют две разные переменные с одинаковым именем; - более того, переменная функции затеняет переменную, поступающую из внешнего мира.
Можем сделать предыдущее правило более точным и адекватным:
Переменная, существующая вне функции, имеет область видимости внутри тела функции, кроме случая, когда функция определяет переменную с тем же именем.
Это также означает, что область видимости переменной, существующей вне функции, поддерживается только при получении ее значения (при чтении). Присвоение значения приводит к созданию собственной переменной функции.
Убедитесь, что Вы хорошо это понимаете, и проведите собственные эксперименты.