Module (41%)
Section (40%)

Функции и области видимости: продолжение

Начнем с проверки, видна ли внутри функции переменная, созданная вне какой-либо функции. Другими словами, распространяется ли имя переменной в тело функции?

Посмотрите код в редакторе. Наша морская свинка тут.

Результат проверки положительный - код выводит:

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, созданная внутри функции, отличается от той, которая была определена вне ее - кажется, что существуют две разные переменные с одинаковым именем;
  • более того, переменная функции затеняет переменную, поступающую из внешнего мира.

Можем сделать предыдущее правило более точным и адекватным:

Переменная, существующая вне функции, имеет область видимости внутри тела функции, кроме случая, когда функция определяет переменную с тем же именем.

Это также означает, что область видимости переменной, существующей вне функции, поддерживается только при получении ее значения (при чтении). Присвоение значения приводит к созданию собственной переменной функции.

Убедитесь, что Вы хорошо это понимаете, и проведите собственные эксперименты.


Code

def my_function():
print("Do I know that variable?", var)


var = 1
my_function()
print(var)
{{ dockerServerErrorMsg }} ×
{{ errorMsg }} ×
{{ successMsg }} ×