Методический материал: Локальные и глобальные переменные в Python
- Что такое переменная
Переменная — это имя, которое ссылается на значение в памяти.
Пример:
x = 10
name = "Alice"
Здесь:
- x хранит число 10
- name хранит строку "Alice"
В Python область видимости переменной определяет, где переменная доступна.
Основные типы:
- Локальные переменные
- Глобальные переменные
⸻
- Локальные переменные (Local Variables)
Определение
Локальная переменная — переменная, созданная внутри функции и доступная только в этой функции.
Пример
def greet():
message = "Привет"
print(message)
greet()
Результат:
Привет
Разбор
Переменная:
message
создана внутри функции greet().
Она существует только во время выполнения функции.
После завершения функции переменная уничтожается.
⸻
Попытка доступа извне функции
def greet():
message = "Привет"
greet()
print(message)
Ошибка:
NameError: name 'message' is not defined
Причина
message — локальная переменная.
Вне функции она не существует.
⸻
Жизненный цикл локальной переменной
Локальная переменная:
- создаётся при вызове функции;
- используется внутри функции;
- удаляется после завершения функции.
Пример:
def calculate():
x = 5
y = 10
print(x + y)
calculate()
После завершения:
x
y
больше не существуют.
⸻
Локальные переменные в разных функциях
Одинаковые имена не конфликтуют.
def first():
x = 10
print(x)
def second():
x = 20
print(x)
first()
second()
Результат:
10
20
Переменные x независимы.
⸻
- Глобальные переменные (Global Variables)
Определение
Глобальная переменная создаётся вне функций и доступна во всей программе.
Пример
x = 100
def show():
print(x)
show()
Результат:
100
Разбор
Переменная:
x = 100
создана вне функции.
Поэтому функция может её читать.
⸻
Использование глобальной переменной в нескольких функциях
name = "Python"
def first():
print(name)
def second():
print(name)
first()
second()
Результат:
Python
Python
⸻
- Конфликт имён: локальная и глобальная переменная
Локальная переменная имеет приоритет.
Пример:
x = 100
def test():
x = 50
print(x)
test()
print(x)
Результат:
50
100
Разбор
Внутри функции:
x = 50
создаётся локальная переменная.
Она не изменяет глобальную.
⸻
- Изменение глобальной переменной внутри функции
Ошибка начинающих:
x = 10
def change():
x = x + 5
change()
Ошибка:
UnboundLocalError
Почему?
Python видит:
x = x + 5
и считает x локальной переменной.
Но локальная x ещё не создана.
⸻
Ключевое слово global
Чтобы изменить глобальную переменную, используется:
global
Пример
x = 10
def change():
global x
x = x + 5
change()
print(x)
Результат:
15
Разбор
Строка:
global x
говорит Python:
использовать глобальную переменную x, а не создавать локальную.
⸻
Несколько глобальных переменных
a = 10
b = 20
def update():
global a, b
a += 5
b += 10
update()
print(a)
print(b)
Результат:
15
30
⸻
- Почему global используют редко
Изменение глобальных переменных усложняет программу:
Плохо
count = 0
def increment():
global count
count += 1
Проблемы:
- трудно искать ошибки;
- функция зависит от внешнего состояния;
- код сложнее тестировать.
⸻
Лучше
Передавать значения через параметры и return.
def increment(count):
return count + 1
count = 0
count = increment(count)
print(count)
Результат:
1
⸻
- Правило LEGB
Python ищет переменные по порядку:
L → E → G → B
L — Local
Локальная область функции.
E — Enclosing
Внешняя функция (вложенные функции).
G — Global
Глобальная область модуля.
B — Built-in
Встроенные функции Python.
Пример:
x = 100
def outer():
x = 50
def inner():
print(x)
inner()
outer()
Результат:
50
Python нашёл x во внешней функции.
⸻
- nonlocal — переменная внешней функции
Используется во вложенных функциях.
Пример:
def outer():
x = 10
def inner():
nonlocal x
x += 5
inner()
print(x)
outer()
Результат:
15
Разница
Ключевое слово Где ищет
global глобальная область
nonlocal внешняя функция
⸻
- Сравнение локальных и глобальных переменных
Характеристика Локальная Глобальная
Где создаётся Внутри функции Вне функции
Где доступна Только в функции Во всей программе
Время жизни Пока работает функция Пока работает программа
Можно изменить в функции Да Только через global
⸻
- Типичные ошибки
Ошибка 1: доступ к локальной переменной извне
def test():
x = 5
print(x)
Ошибка:
NameError
⸻
Ошибка 2: изменение глобальной переменной без global
x = 10
def change():
x += 1
Ошибка:
UnboundLocalError
⸻
Ошибка 3: злоупотребление global
Плохо:
money = 1000
def buy():
global money
money -= 100
Лучше:
def buy(balance):
return balance - 100
money = 1000
money = buy(money)
⸻
- Практические задания
Задание 1
Что выведет код?
x = 10
def func():
x = 20
print(x)
func()
print(x)
⸻
Задание 2
Исправьте код:
count = 0
def add():
count += 1
⸻
Задание 3
Создайте функцию, которая принимает число и увеличивает его на 5 без использования global.
⸻
- Итог
Локальная переменная
- создаётся внутри функции;
- существует только в функции;
- безопаснее для программы.
Глобальная переменная
- создаётся вне функций;
- доступна везде;
- может изменяться через global.
Рекомендация:
- использовать локальные переменные по умолчанию;
- global применять только при необходимости;
- передавать данные через параметры функции и return.