Этот урок посвящен одной из ключевых концепций в Python — областям видимости переменных. Мы разберем разницу между глобальными (доступными во всей программе) и локальными (существующими только внутри функции) переменными.
Вы узнаете:
1. Где живут переменные, объявленные внутри и снаружи функций.
2. Что такое "затенение" (shadowing) переменных.
3. Как изменять глобальные переменные внутри функций с помощью ключевого слова global.
4. Как избежать распространенных ошибок, связанных с `UnboundLocalError`.
Задания расположены от простых к сложным: от определения типа области видимости до написания корректного кода с изменением состояний. Внимательно следите за отступами и синтаксисом!
- Модуль 1: Основы синтаксиса Python
- Модуль 2: Переменные и типы данных
- Модуль 3: Операторы
- Арифметические операторы (+, -, *, /).
- Целочисленное деление и остаток (// и %).
- Возведение в степень (**).
- Операторы сравнения.
- Логические операторы (and, or, not).
- Операторы присваивания (=, +=, -=).
- Операторы принадлежности (in, not in).
- Операторы идентичности (is, is not).
- Битовые операторы.
- Тернарный оператор.
- Модуль 4: Ввод и вывод данных
- Модуль 5: Условные конструкции
- Модуль 6: Циклы
- Модуль 7: Строки
- Модуль 8: Списки
- Модуль 9: Кортежи
- Модуль 10: Словари
- Модуль 11: Множества
- Модуль 12: Функции
- Модуль 13: Встроенные функции
- Модуль 14: Работа с файлами
- Модуль 15: Обработка исключений
- Модуль 16: Модули и пакеты
- Модуль 17: ООП - Основы
- Модуль 18: ООП - Продвинутый уровень
- Модуль 19: Декораторы
- Модуль 20: Генераторы и итераторы
- Модуль 21: Регулярные выражения
- Модуль 22: Дата и время
- Модуль 23: Математические операции
- Модуль 24: Работа с сетью
- Модуль 25: Асинхронное программирование
- Модуль 26: Многопоточность
- Модуль 27: Тестирование
- Модуль 28: Базы данных
- Модуль 29: Алгоритмы и структуры данных
- Модуль 30: Продвинутые возможности
Глобальные или Локальные?
В приведенном коде есть переменные, объявленные в разных местах. Распределите строки кода с объявлениями переменных по соответствующим категориям: Глобальная область видимости (Global scope) или Локальная область видимости (Local scope).
player_score = 0def update_score(): current_bonus = 50 temp_val = 10max_lives = 3 total = current_bonus + 100server_name = "EU_West"Чтение глобальной переменной
Проанализируйте код. Функция `greet` обращается к переменной `user_name`. Что будет выведено в консоль при вызове этой функции?
user_name = "Alice"
def greet():
print(f"Hello, {user_name}!")
greet()Эффект затенения (Shadowing)
В этом коде есть переменная `x` снаружи и переменная `x` внутри функции. Какое число выведет последняя строка `print(x)` (которая находится вне функции)?
x = 100
def change_value():
x = 50 # Локальное присваивание
print(f"Inside: {x}")
change_value()
print(x)Изменение глобальной переменной
Мы хотим, чтобы функция `increment` действительно увеличивала глобальный счетчик `count`. Вставьте необходимое ключевое слово и имя переменной, чтобы разрешить изменение.
count = 0
def increment():
input1S input2S # Разрешаем доступ на запись
count += 1
increment()
print(count) # Должно вывести 1Терминология областей видимости
Сопоставьте термины с их правильными определениями в контексте Python.
Глобальная переменнаяЛокальная переменнаяglobalShadowing (Затенение)Кошелек: пополнение баланса
Допишите функцию `deposit`, которая принимает сумму `amount` и добавляет её к глобальной переменной `wallet`. Используйте элементы из банка.
wallet = 100
def deposit(amount):
input1S input2S
input3S += amount
deposit(50)
print(wallet)Ошибка в объявлении global
Программист допустил синтаксическую ошибку при попытке объявить глобальную переменную внутри функции. Найдите строку с ошибкой и исправьте опечатку в ключевом слове.
settings = {"theme": "dark"}def switch_theme(): globl settings settings["theme"] = "light"Сборка счетчика посещений
Соберите работающий скрипт, который увеличивает счетчик посещений. Строки должны идти в логическом порядке: объявление переменной -> объявление функции -> вызов -> проверка результата. Обратите внимание на отступы в строках!
visits = 0def add_visit(): global visits visits += 1add_visit()print(visits) visits = visits + 1global visits = 0Порядок выполнения кода с глобальными переменными
Python выполняет код сверху вниз, но определения функций (`def`) не запускают их тело сразу. Расставьте строки в том порядке, в котором они будут фактически выполняться интерпретатором (по шагам).
x = 5 (Шаг 1)def modify(): (Шаг 2 - определение)modify() (Шаг 3 - вызов) global x (Шаг 4 - внутри функции) x = 10 (Шаг 5 - изменение)print(x) (Шаг 6 - вывод результата)Ловушка с присваиванием
Что произойдет при выполнении этого кода? Обратите внимание: мы пытаемся распечатать `a` до того, как присвоить ей новое значение, но всё это происходит внутри одной функции.
a = 10
def test():
print(a)
a = 20
test()