Основы Python: от установки до декораторов
Ключевые тезисы
- Курс сфокусирован на практическом применении Python для трудоустройства
- Изучается только необходимый минимум, без "воды"
- Практика и повторение — ключ к усвоению материала
- Важен правильный подход к обучению: повторять код, экспериментировать, задавать вопросы
- Типизация параметров и возвращаемых значений функций для ясности кода
- Обработка исключений с помощью
try/except/finally - Импорт модулей и работа с внешними библиотеками
- Основы ООП: классы, инкапсуляция, наследование, полиморфизм
- Контекстные менеджеры для безопасной работы с ресурсами
- Декораторы для модификации поведения функций
Начало работы
Установка и настройка
- Установить Python с официального сайта (для Windows могут потребоваться дополнительные шаги).
- Проверить установку: выполнить в терминале
python -v(илиpython3 -vна Mac/Linux). - Выбрать редактор кода: для старта рекомендуется PyCharm (всё "из коробки").
Первая программа
- Вывод в консоль: функция
print().print("Hello World") print("Привет", "Мир") # Несколько аргументов через запятую - Ввод от пользователя: функция
input().name = input("Введи своё имя: ") print("Привет,", name)
Переменные и типы данных
Переменные
- Переменная — это "ярлык" для значения, которое хранится в памяти.
- Правила именования:
- Латинские буквы, цифры, нижнее подчёркивание.
- Не может начинаться с цифры.
- Регистр имеет значение (
nameиName— разные переменные).
Основные типы данных
- Строки (
str) — текст в кавычках.language = "Python" - Целые числа (
int) — числа без кавычек.age = 25 - Дробные числа (
float) — числа с плавающей точкой.price = 19.99 - Логический тип (
bool) —TrueилиFalse. - Пустое значение (
None) — отсутствие значения.
Преобразование типов
- Используются функции
str(),int(),float(),bool().number = 10 text = str(number) # "10"
Операции с числами
- Базовые:
+,-,*,/. - Сокращённые:
+=,-=,*=,/=. - Специальные:
- Возведение в степень:
**(например,2 ** 3 = 8). - Целочисленное деление:
//(например,10 // 3 = 3). - Остаток от деления:
%(например,10 % 3 = 1).
- Возведение в степень:
Операции со строками
- Длина строки:
len(text). - Сложение (конкатенация):
"Hello" + " " + "World". - Умножение (повторение):
"Hi" * 3→"HiHiHi".
Условный оператор (if/elif/else)
Операторы сравнения
>(больше),<(меньше),==(равно),!=(не равно),>=,<=.
Логические операторы
and(и),or(или),not(не).
Структура условия
if условие:
# код, если условие True
elif другое_условие:
# код, если другое_условие True
else:
# код, если все условия False
Пример (проверка чётности):
number = int(input("Введите число: "))
if number % 2 == 0:
print("Чётное")
else:
print("Нечётное")
Циклы
Цикл for
Используется для перебора последовательностей (строк, списков, диапазонов).
# Повторить 5 раз
for i in range(5):
print("Привет")
# Перебрать список
languages = ["Python", "JavaScript", "C#"]
for lang in languages:
print(lang)
Функция range():
range(5)→0, 1, 2, 3, 4range(1, 6)→1, 2, 3, 4, 5range(1, 10, 2)→1, 3, 5, 7, 9(с шагом 2)
Цикл while
Выполняется, пока условие истинно (True).
count = 0
while count < 5:
print("Привет")
count += 1 # Увеличиваем счётчик
Управление циклами
break— немедленно прерывает цикл.continue— пропускает текущую итерацию, переходит к следующей.
Работа со строками (продвинутый уровень)
Проверка вхождения
text = "Python is great"
print("great" in text) # True
Индексы и срезы
- Индексация начинается с
0. - Обращение по индексу:
text[0](первый символ). - Отрицательные индексы:
text[-1](последний символ). - Срезы:
text[начало:конец:шаг](конец не включается).text = "Python" print(text[0:2]) # "Py" print(text[::2]) # "Pto" (каждый второй символ)
Методы строк
text.upper()— все буквы заглавные.text.lower()— все буквы строчные.text.capitalize()— первая буква заглавная.text.startswith("Py")— начинается ли строка с "Py" (возвращаетbool).text.endswith("on")— заканчивается ли строка на "on".text.strip()— удаляет пробелы в начале и конце.text.replace("old", "new")— заменяет подстроку.text.count("a")— подсчитывает количество вхождений.
Форматирование строк (f-строки)
name = "Кирилл"
age = 18
info = f"Имя: {name}, Возраст: {age}"
print(info) # Имя: Кирилл, Возраст: 18
Списки (list)
Создание списка
my_list = ["Python", 15, 3.14, "JavaScript"]
empty_list = []
another_list = list(range(5)) # [0, 1, 2, 3, 4]
Базовые операции
- Длина:
len(my_list). - Проверка вхождения:
"Python" in my_list. - Сумма/мин/макс (для чисел):
sum(numbers),min(numbers),max(numbers).
Добавление элементов
append(x)— добавить в конец.insert(index, x)— вставить по индексу.
Удаление элементов
pop(index)— удалить по индексу (возвращает удалённый элемент).remove(value)— удалить по значению.del my_list[index]— удалить по индексу.
Сортировка
sort()— сортирует список (по возрастанию).sort(reverse=True)— сортирует по убыванию.reverse()— разворачивает список.
Итерация по списку
# Простой перебор
for item in my_list:
print(item)
# С индексом (используем enumerate)
for index, item in enumerate(my_list):
print(f"Индекс {index}: {item}")
Преобразование строка ↔ список
split()— разбивает строку на список по пробелам.split(".")— разбивает строку по указанному разделителю.join()— объединяет список в строку с указанным разделителем.words = ["Я", "изучаю", "Python"] text = " ".join(words) # "Я изучаю Python"
Генераторы списков
Краткий способ создания списков.
# Создать список квадратов чисел от 0 до 5
squares = [x ** 2 for x in range(6)] # [0, 1, 4, 9, 16, 25]
# Только чётные квадраты
even_squares = [x ** 2 for x in range(6) if x % 2 == 0] # [0, 4, 16]
Словари (dict)
Создание словаря
Словарь хранит данные в формате ключ: значение.
user = {
"name": "Кирилл",
"age": 18,
"is_mentor": True
}
Доступ к значениям
user["name"]— получить значение по ключу (ошибка, если ключа нет).user.get("name")— получить значение (вернётNone, если ключа нет).user.get("name", "Гость")— получить значение или значение по умолчанию.
Изменение словаря
- Добавить/изменить:
user["city"] = "Москва". - Удалить:
user.pop("age")илиdel user["age"].
Итерация по словарю
# Только ключи
for key in user.keys():
print(key)
# Только значения
for value in user.values():
print(value)
# Пары ключ-значение
for key, value in user.items():
print(f"{key}: {value}")
Типизация функций
Типизация — указание ожидаемых типов данных для параметров и возвращаемого значения функции.
Зачем это нужно?
- Делает код более понятным и отчётливым
- Помогает избежать ошибок из-за передачи данных неверного типа
- Не влияет на исполнение кода, служит для подсказок разработчику
Синтаксис:
def calculate_price(price: int, quantity: int, has_discount: bool) -> int:
total = price * quantity
if has_discount:
total -= 10
return total
Аналогично можно типизировать переменные: name: str = "Кирилл".
Обработка исключений (try/except)
Конструкция для перехвата и обработки ошибок во время выполнения программы.
Базовый синтаксис:
try:
# Код, который может вызвать ошибку
result = 10 / int(input("Введите число: "))
except ZeroDivisionError:
# Обработка конкретной ошибки (деление на ноль)
print("Бро, не вводи ноль")
except ValueError:
# Обработка другой ошибки (неверное преобразование типа)
print("Бро, введи число, а не строку")
except Exception as error:
# Перехват ЛЮБОЙ ошибки (не лучшая практика)
print(f"Произошла какая-то ошибка: {error}")
else:
# Выполняется, если в try НЕ произошло ошибки
print("Ошибка не произошла")
finally:
# Выполняется ВСЕГДА (например, для закрытия файлов)
print("Этот текст выведется всегда")
Выброс своих исключений:
age = -10
if age < 0:
raise ValueError("Введите корректный возраст")
Импорты и библиотеки
Импорт своих модулей:
- Полный импорт:
import config→ обращение черезconfig.mentor_name - Частичный импорт:
from config import print_mentor_info→ прямое использование функции - Импорт всего:
from config import *(не рекомендуется из-за конфликтов имён)
Работа с библиотеками:
- Встроенные:
import math,import datetime,import random - Внешние: устанавливаются через
pip install
Виртуальное окружение (venv):
- Изолирует зависимости проекта
- Создание:
python -m venv venv_name - Активация (Windows):
venv_name\Scripts\activate - Установка библиотек в окружение:
pip install library_name
Основы ООП (Объектно-Ориентированное Программирование)
Класс — шаблон для создания объектов. Экземпляр — конкретный объект, созданный по шаблону класса.
Базовый пример класса:
class User:
# Конструктор (вызывается при создании экземпляра)
def __init__(self, name: str, age: int):
self.name = name # self — ссылка на конкретный экземпляр
self.age = age
self.is_human = True
# Метод класса
def say_hello(self, to_name: str = ""):
print(f"Привет, {to_name}. Я {self.name}, мне {self.age}")
self.age += 1 # Можем менять состояние объекта
# Создание экземпляров
user1 = User("Кирилл", 18)
user2 = User("Игорь", 25)
user1.say_hello("Вася")
Принципы ООП
Инкапсуляция
Сокрытие внутренней реализации объекта.
- Одно подчёркивание:
_balance— соглашение, что атрибут "защищённый" - Два подчёркивания:
__balance— Python переименовывает атрибут (name mangling), но доступ всё равно возможен
class BankAccount:
def __init__(self, balance: int):
self.__balance = balance # "Защищённый" атрибут
def deposit(self, amount: int):
self.__balance += amount
def get_balance(self) -> int:
return self.__balance
Наследование
Создание дочерних классов на основе родительского.
class Employee: # Родительский класс
def __init__(self, name: str, salary: int):
self.name = name
self.salary = salary
def work(self):
print(f"{self.name} работает")
class Developer(Employee): # Дочерний класс
def __init__(self, name: str, salary: int, language: str):
super().__init__(name, salary) # Вызов конструктора родителя
self.language = language
def work(self): # Переопределение метода
print(f"{self.name} пишет код на {self.language}")
Полиморфизм
Возможность использовать объекты разных классов через единый интерфейс.
team = [Developer("Кирилл", 1000, "Python"), Designer("Игорь", 800)]
for employee in team:
employee.work() # У каждого свой work(), но интерфейс одинаковый
Контекстные менеджеры (with)
Обеспечивают выполнение кода до и после блока, чаще всего для работы с ресурсами (файлами).
Работа с файлами БЕЗ контекстного менеджера:
file = open("data.txt", "r")
content = file.read()
print(content)
file.close() # Важно не забыть закрыть!
Работа с файлами С контекстным менеджером:
with open("data.txt", "r") as file:
content = file.read()
print(content)
# Файл автоматически закроется