JustCaptain kod-buduschego
1b7ae631e8e0aa08482b2abc32064a70d25c5de5
Перейти к файлу
Код
MATERIAL.md

Методический материал: Локальные и глобальные переменные в Python

  1. Что такое переменная

Переменная — это имя, которое ссылается на значение в памяти.

Пример:

x = 10
name = "Alice"

Здесь:

  • x хранит число 10
  • name хранит строку "Alice"

В Python область видимости переменной определяет, где переменная доступна.

Основные типы:

  1. Локальные переменные
  2. Глобальные переменные

⸻

  1. Локальные переменные (Local Variables)

Определение

Локальная переменная — переменная, созданная внутри функции и доступная только в этой функции.

Пример

def greet():
message = "Привет"
print(message)
greet()

Результат:

Привет

Разбор

Переменная:

message

создана внутри функции greet().

Она существует только во время выполнения функции.

После завершения функции переменная уничтожается.

⸻

Попытка доступа извне функции

def greet():
message = "Привет"
greet()
print(message)

Ошибка:

NameError: name 'message' is not defined

Причина

message — локальная переменная.

Вне функции она не существует.

⸻

Жизненный цикл локальной переменной

Локальная переменная:

  1. создаётся при вызове функции;
  2. используется внутри функции;
  3. удаляется после завершения функции.

Пример:

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 независимы.

⸻

  1. Глобальные переменные (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

⸻

  1. Конфликт имён: локальная и глобальная переменная

Локальная переменная имеет приоритет.

Пример:

x = 100
def test():
x = 50
print(x)
test()
print(x)

Результат:

50
100

Разбор

Внутри функции:

x = 50

создаётся локальная переменная.

Она не изменяет глобальную.

⸻

  1. Изменение глобальной переменной внутри функции

Ошибка начинающих:

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

⸻

  1. Почему global используют редко

Изменение глобальных переменных усложняет программу:

Плохо

count = 0
def increment():
global count
count += 1

Проблемы:

  • трудно искать ошибки;
  • функция зависит от внешнего состояния;
  • код сложнее тестировать.

⸻

Лучше

Передавать значения через параметры и return.

def increment(count):
return count + 1
count = 0
count = increment(count)
print(count)

Результат:

1

⸻

  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 во внешней функции.

⸻

  1. nonlocal — переменная внешней функции

Используется во вложенных функциях.

Пример:

def outer():
x = 10
def inner():
nonlocal x
x += 5
inner()
print(x)
outer()

Результат:

15

Разница

Ключевое слово Где ищет
global глобальная область
nonlocal внешняя функция

⸻

  1. Сравнение локальных и глобальных переменных

Характеристика Локальная Глобальная
Где создаётся Внутри функции Вне функции
Где доступна Только в функции Во всей программе
Время жизни Пока работает функция Пока работает программа
Можно изменить в функции Да Только через global

⸻

  1. Типичные ошибки

Ошибка 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. Практические задания

Задание 1

Что выведет код?

x = 10
def func():
x = 20
print(x)
func()
print(x)

⸻

Задание 2

Исправьте код:

count = 0
def add():
count += 1

⸻

Задание 3

Создайте функцию, которая принимает число и увеличивает его на 5 без использования global.

⸻

  1. Итог

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

  • создаётся внутри функции;
  • существует только в функции;
  • безопаснее для программы.

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

  • создаётся вне функций;
  • доступна везде;
  • может изменяться через global.

Рекомендация:

  • использовать локальные переменные по умолчанию;
  • global применять только при необходимости;
  • передавать данные через параметры функции и return.