В данной лабораторной работе исследуются следующие положения, рассмотренные в главе 1:
· переменная как ссылка на объект;
· различие между равенством объектов и их идентичностью;
· влияние изменяемости на поведение программы;
· область видимости;
· механизм исключений.
Исследовать архитектуру выполнения программ в Python и закрепить понимание ссылочной модели переменных, изменяемости объектов, области видимости и обработки исключений.
2. ЗАДАНИЕ К ЛАБОРАТОРНОЙ РАБОТЕ
В рамках лабораторной работы необходимо:
1) Подготовить рабочую среду (см. Приложение 1).
2) Создать файл lab1.ipynb.
3) Выполнить все эксперименты, представленные в пункте 3 «Экспериментальная часть» лабораторной работы.
4) Выполнить исследовательские задания, представленные в пункте 4 «Исследовательские задания» лабораторной работы.
5) Зафиксировать результаты и сформулировать аналитические выводы.
6) Подготовить отчёт и защитить работу.
Каждый эксперимент должен содержать:
· программный код;
· демонстрация программы;
· аналитическое пояснение результата.
Эксперимент 1. Ссылочная модель переменных
a = 100
b = a
print("id(a):", id(a))
print("id(b):", id(b))
a = 200
print("id(a) после изменения:", id(a))
print("id(b):", id(b))
1) Совпадают ли идентификаторы?
2) Почему после изменения a объект изменился?
3) Что фактически хранит переменная?
Эксперимент 2. Изменяемые объекты и побочные эффекты
numbers = [1, 2, 3]
alias = numbers
print("id(numbers):", id(numbers))
print("id(alias):", id(alias))
Изменение списка:
numbers.append(4)
print(alias)
Вопросы для анализа:
1) Почему изменился alias?
2) Как создать независимую копию списка?
3) Проверить через id() поведение копии.
Эксперимент 3. Передача аргументов в функцию
def modify_list(lst):
lst.append(999)
data = [10, 20]
modify_list(data)
print(data)
Вопросы и задания для анализа:
1) Почему список изменился?
2) Изменится ли число при аналогичном эксперименте?
3) Сделать эксперимент с типом int.
Эксперимент 4. Область видимости
x = 5
def test():
x = 10
print("Внутри функции:",
x)
test()
print("Снаружи:", x)
Задание для анализа: Добавить global x и сравнить поведение.
Эксперимент 5. Исключения и устойчивость программы
Создать программу:
while True:
try:
value = int(input("Введите число: "))
break
except ValueError:
print("Ошибка ввода.")
print("Квадрат:", value ** 2)
Вопросы и задания для анализа:
1)
Что произойдёт без try-except?
2) Почему программа становится устойчивой?
3) Как можно расширить обработку ошибок?
Задание
1. Исследование различий между ==
и is.
1.1 Создать несколько объектов одинакового значения.
1.2
Сравнить
их с помощью ==.
1.3 Сравнить
их с помощью is.
1.4 Объяснить различие.
Задание 2. Исследование интернирования целых чисел.
Пример исследования – Проверить поведение:
a= 256
b = 256print(a is b) a = 257b = 257print(a is b)
Проанализировать результат.
Задание 3. Исследование поверхностного копирования объектов.
Пример исследования – Сравнить:
a= [1, 2]
b=a
c=a.copy()
Проанализировать
различия в поведении при изменении a.
Задание 4. Исследование глубокого копирования вложенных структур:
· реализовать пример;
·
использовать
модуль copy;
·
сравнить id() вложенных элементов;
· сформулировать вывод о механизме хранения объектов в памяти.
Пример исследования– Создать список списков:
matrix = [[1, 2], [3, 4]]copy_matrix = mat rix.copy()
Изменить элемент:
matrix[0][0] = 999
Проанализировать:
1) Почему изменилась копия?
2) В чём отличие поверхностного и глубокого копирования?
3) Реализовать глубокую копию с
использованием модуля copy.
4) Сравнить id() внутренних объектов.
Сформулировать вывод о механизме хранения вложенных структур.
5. ЗАДАНИЯ К САМОСТОЯТЕЛЬНОЙ РАБОТЕ ОБУЧАЮЩЕГОСЯ (СРО)
1) Объяснить, что означает утверждение «в Python всё является объектом».
2) В чём различие между равенством значений и равенством объектов?
3) Почему понимание изменяемости критично для анализа данных?
4)
В каких случаях использование global
является нежелательным?
5) Что такое устойчивость программы к ошибкам?
Отчёт по лабораторной работе должен содержать:
· цель работы;
· описание каждого эксперимента;
· описание исследований;
· программный код с комментариями;
· результаты выполнения;
· аналитические выводы по каждому эксперименту и исследованию;
· обобщающий вывод о механизме выполнения программ в Python.
В заключительной части отчёта рекомендуется представить анализ следующих положений:
1) Что хранит переменная в Python – значение или ссылку на объект?
2) В чём различие между операторами == и is?
3) Почему изменяемость объектов влияет на корректность программ анализа данных?
4) В чём заключается риск неявного изменения объектов?
5) Как связаны область видимости переменных и надёжность программы?
Работа защищается с демонстрацией выполнения экспериментов и полученных результатов.
1. Русскоязычная документация по Python: https://pylessons.readthedocs.io/ru/latest/
2. Документация по языку Python3. https://docs-python.ru/
3. Документация Jupyter: https://docs.jupyter.org/
4. Справочник по виртуальным окружениям Python: https://docs.python.org/3/library/venv.html