Найти тему
programmer's notes (python and more)

Основы программирования на языке Python. Приложение 1 к уроку 25. Функции (глобальные и локальные переменные)

Доброго времени суток, читатели, зрители моего канала programmer's notes.

Приложение к видео-уроку 25

Глобальные и локальные переменные

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

И вот здесь есть один важный момент. В видео-уроке я об этом не сказал, точнее сказал как-то невнятно, но здесь напишу. Следует различать область видимости и область действия. Область действия для глобальной переменной весь программный файл, а вот видимость можно сузить, если внутри функции определить переменную с таким же именем, как глобальная переменна. И вот здесь есть в чем по разбираться. Но обо всем по порядку. Есть еще такое понятие, как время жизни. Но я думаю посвятить этим понятиям отдельный урок.

Пример программы с глобальной переменной представлен ниже.

primer67.py, текст ниже
primer67.py, текст ниже
primer67.py

Результат выполнения программы

Глобальная переменная
Глобальная переменная 2

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

print(p)
p = 'Глобальная переменная'

ошибочны, так переменная используется раньше, чем определена.

Заметим также, что область видимости и область действия в данном случае совпадает.

Рассмотрим пример с локальной переменной

primer68.py, текст см. ниже
primer68.py, текст см. ниже
primer68.py

Результат выполнения программы

30
3
300

Переменная p в данном примере локальная, она видна и действует только в пределах одной функции.

Однако локальную переменную можно передать при выходе из программы с помощью return.

primer69.py, текст см. ниже
primer69.py, текст см. ниже
primer69.py

Результат выполнения программы

30

Здесь есть один важный момент. В сущности p и a это одна и та же переменная. Не буду на этот счет больше распространяться, время еще не пришло. Скажу только, что пример можно интерпретировать, как преобразование локальной переменной в глобальную. Как-то так!

Ниже представлена программа, когда локальная переменная перекрывает область видимости глобальной переменной в пределах функции

primer70.py, текст программы см. ниже
primer70.py, текст программы см. ниже
primer70.py

Результат выполнения программы

Глобальная переменная
Локальная переменная
Глобальная переменная 2
Локальная переменная

Мы видим, что в пределах функции работает именно локальная переменная. Я понимаю, что читатели с философским складом ума могут сказать, что сузилась и область действия. Но я с вами не соглашусь. Просто потому, что глобальная переменная никуда не делась. Доступ к ней можно получить вот так

print(globals()['p'])

или так

globals()['p'] = 'qwerty'

Т.е. глобальная переменная по-прежнему действует, хотя не видна под прежним именем.

Обратимся теперь к директиве языка global

primer71.py, текст программы см. ниже
primer71.py, текст программы см. ниже
primer71.py

Результат выполнения программы

Глобальная переменная
Глобальная переменная
Глобальная переменная 2
Глобальная переменная 2
Локальная переменная
Глобальная переменная 2

С помощью global мы в внутри функции определили глобальную переменную. При это в функции proc2() переменная p - локальная переменная.

Пока все. Всего наилучшего. Оставляйте свои комментарии, не забывайте про лайки и подписывайтесь на мой канал programmer's notes.

- Моя программа быстрая,  компактная и написана в правильном стиле. А ваша громоздкая и написана черти как, так нельзя писать. - Но моя программа дает верный результат, а ваша - нет.
- Моя программа быстрая, компактная и написана в правильном стиле. А ваша громоздкая и написана черти как, так нельзя писать. - Но моя программа дает верный результат, а ваша - нет.