Анализ данных на Python в примерах и задачах

Функции и классы

Лекция посвящена основам определения и использования функций в Python, а также введению в объектно-ориентированное программирование через классы. Рассматривается синтаксис def, механизм передачи параметров, возврат значений return, аргументы по умолчанию и динамическая типизация. Далее объясняется, для чего нужны классы: от конструктора (__init__) и атрибутов (self) до методов экземпляра. На практическом примере «Журнал с весами оценок» показано, как классы помогают структурировать код, переиспользовать логику и избегать дублирования при изменении весов или добавлении студентов.

Основные мысли

1. Функции в Python создаются через def, типы аргументов не указываются — интерпретатор проверяет возможность выполнения операций в рантайме.
2. Возврат значенияreturn. Тело функции выделяется отступом (табуляцией) после двоеточия.
3. Аргументы по умолчанию позволяют вызывать функцию с меньшим числом параметров, подставляя стандартные значения.
4. Ошибки возникают, например, при попытке сложить строку и число; преобразование типов (str()) помогает их избежать.
5. Классы нужны для создания сложных, комплексных решений, когда одной функции уже недостаточно.
6. Класс = абстракция (описание свойств и действий), а объект — конкретный представитель класса (например, «журнал с весами 0.3, 0.2, 0.5»).
7. Конструктор __init__ и параметр self связывают атрибуты с конкретным объектом. Атрибуты (данные) и методы (функции) — элементы класса.
8. Преимущество классов: при изменении логики (например, весов оценок) достаточно изменить метод в одном месте, а не 30 строчек.
Показывать лекцию целиком
Краткое изложение

1. Определение функции
Ключевое слово def, имя, параметры в скобках, двоеточие и тело с отступом. Python не требует указания типов. Пример: функция get_mark от трёх параметров с весами 0.4, 0.5, 0.1.
2. Вызов и возврат значения
return завершает функцию и возвращает результат. Если передать строку вместо числа — ошибка. Пример: get_mark(10, 8, 7) 8.7.
3. Зачем нужны функции
Для повторного использования кода (например, расчёт итоговой оценки для 30 студентов). При изменении весов правим функцию один раз.
4. Аргументы по умолчанию
Объявление: def get_mark(a1, a2, a3, w1=0.4, w2=0.5, w3=0.1). Можно передать только новые веса, остальные берутся по умолчанию.
5. Простые встроенные функции
sum() — сумма чисел в списке. str() — преобразование в строку, чтобы избежать ошибки конкатенации.
6. Переход к классам
Класс нужен для нетривиальных структур. Пример: класс Journal. Ключевое слово class, затем имя.
7. Конструктор класса
def __init__(self, w1, w2, w3). self — ссылка на создаваемый объект. Атрибуты: self.w1 = w1 и т.д.
8. Методы класса
o clear(self) — обнуляет список оценок (self.marks = []).
o add_mark(self, name, t1, t2, t3) — считает взвешенную сумму и добавляет пару (name, mark) в self.marks.
o print_marks(self) — выводит все оценки.
9. Использование класса
Создаём объект: journal = Journal(0.3, 0.2, 0.5). Вызываем методы: journal.add_mark("Надя", 10, 9, 8). Обращение к атрибуту: journal.w1.
10. Несколько объектов
Можно создать второй журнал с другими весами (journal2 = Journal(0.1, 0.4, 0.5)). У каждого объекта свои атрибуты. Если не вызвать clear() перед использованием, атрибута marks может не быть → ошибка.

Выводы

Функции в Python просты и гибки за счёт динамической типизации, что ускоряет анализ данных, но может приводить к ошибкам на этапе выполнения.
Аргументы по умолчанию повышают удобство и сокращают код.
Классы обеспечивают более высокий уровень абстракции, объединяя данные (атрибуты) и поведение (методы). Это необходимо при разработке больших приложений, а не быстрых скриптов.
• Использование self и конструктора позволяет создавать множество независимых объектов с одинаковой структурой, но разными параметрами.
• При изменении требований (например, формулы оценки) достаточно отредактировать метод внутри класса, а не переписывать код для каждого экземпляра.

Вопросы для самопроверки

1. Какое ключевое слово используется для определения функции в Python, и нужно ли указывать типы параметров?
2. Что произойдёт, если внутри функции попытаться умножить число на строку?
3. Для чего нужен оператор return и что будет, если его не написать?
4. Как задать аргумент функции со значением по умолчанию? Приведите пример.
5. Чем класс отличается от объекта? Что такое self в конструкторе?
6. Что делает метод __init__ в классе?
7. Как обратиться к атрибуту объекта и как вызвать его метод?
8. В чём преимущество использования класса Journal перед набором отдельных функций и переменных?
9. Почему в примере с journal2 после создания объекта нельзя сразу вызвать print_marks()?
10. Какой символ в Python обозначает комментарий, и зачем он нужен?
Вернуться к учебному плану