Область видимости функции Python

Я умудрился растянуть рассказ о функциях аж на четыре статьи (третья статья здесь). Несмотря на то, что это лишь самые общие сведения для новичков. Но именно потому, что всё это для новичков, я и не выдаю много сведений сразу. Сегодня с функциями закончим (во всяком случае пока).

В Python, как и в большинстве других языков, параметры и переменные функций являются локальными. То есть видимы только внутри функции. При желании в функциях можно использовать глобальные переменные, но для этого придётся принять соответствующие меры (подробнее здесь). По умолчанию же все переменные внутри функции локальны. Пример:

Я умудрился растянуть рассказ о функциях аж на четыре статьи (третья статья здесь). Несмотря на то, что это лишь самые общие сведения для новичков.

Здесь мы объявили две глобальные переменные. А затем одну из них использовали в качестве параметра в функции, а вторую - в качестве локальной переменной в функции (точнее, не сами переменные, а их имена).

В нормальных языках программирования переменная с именем Локальная внутри функции являлась бы глобальной, потому что она не объявлена внутри функции. Но в Python нет каких-либо ключевых слов для объявления переменных. Поэтому любое первое упоминание переменной считается объявлением.

Но ведь переменная с именем Локальная уже была объявлена! Нет… Вы не понимаете… Это другое… Художник так видит. И вы просто должны знать, что все переменные внутри функции являются локальными, даже если переменная с таким именем уже была объявлена где-то выше (потому что она там выше тоже не совсем глобальная )))

В итоге “простой” язык Python становится не очень простым, поскольку вам надо довольно много помнить (знать) всякой шняги, чтобы не совершать труднонаходимых ошибок. В то время как в других, более строгих языках, вам не обязательно помнить всё - правила таких языков уберегают вас от глупых ошибок.

Для переменных функции память выделяется только при вызове функции. После выполнения функции память освобождается, и все локальные переменные уничтожаются. Поэтому вы не сможете их больше нигде использовать, кроме как внутри функции. И поэтому последующий вывод значений переменных Параметр и Локальная выведет значения, которые им были присвоены в начале программы. То есть по сути переменные, объявленные в начале программы, и переменные/параметры функции - это разные переменные. Несмотря на то, что у них одинаковые имена.

На этом всё. Подписывайтесь на канал, чтобы ничего не пропустить.