JuniorPython Developer > Основы Python > Основы Python
Короткий ответ Для JSON используется стандартный модуль json: json.dump() сохраняет объект в файл, json.load() читает его обратно, а dumps и loads работают со строками. Для CSV в стандартной библиотеке есть модуль csv, а для табличного чтения с типами часто используют pandas. Как это работает подробнее JSON — основной формат обмена данными в вебе, поэтому чтение и запись встречаются при работе с API и конфигурациями. Сериализация. json.dumps() превращает Python-объект в строку JSON, а json.dump() записывает его в файл. Десериализация. json.loads() разбирает строку JSON в Python-объект, а json.load() читает данные из файла. Ограничения формата. Ключи словаря должны быть строками, а даты и множества требуют явной обработки. CSV. csv.writer и csv.reader работают со списками строк, а DictWriter и DictReader — со словарями. Pandas. Для чтения CSV как таблицы с преобразованием типов удобна сторонняя библиотека pandas. Пример кода Что использовать на практике Файлы JSON. Для сохранения и загрузки структур используй
csvfile-io
MiddleData Analyst > Метрики и эксперименты > Продуктовые метрики
Главная метрика должна отражать полученную пользователем ценность и быть управляемой командой.
МетрикиПродукт
MiddleUX/UI Designer > UX Research > Юзабилити-тестирование
Тестирование даёт измеримые данные: успешность задачи, время, количество ошибок и запросов помощи.
UX Research
MiddlePython Developer > Основы Python > Инструменты разработки
Короткий ответ timeit даёт простой способ замерить время выполнения небольших фрагментов кода и обходит типичные ловушки измерения. cProfile — детерминированный профилировщик целых программ на C с разумными накладными расходами, а profile — его чистая Python-реализация. Профилировщики собирают статистику о том, как часто и как долго выполнялись части программы, а не бенчмарки. Как это работает подробнее Инструменты не взаимозаменяемы: один отвечает на вопрос, сколько времени занимает кусок кода, другой — на что программа тратит время в целом. Модуль timeit. Измеряет время выполнения небольших фрагментов, доступен из командной строки и как вызываемый модуль. cProfile и profile. Оба реализуют детерминированное профилирование и собирают статистику выполнения для целых программ. Разница реализаций. cProfile — расширение на C, подходящее для длительных программ; profile — Python-реализация того же интерфейса с большими накладными расходами. Оформление отчётов. Собранную статистику удобно превращать в отчёты модуле
cprofileperformance
MiddleJava Developer > Java Core > Исключения
Короткий ответ Неперехваченное исключение всплывает вверх по стеку вызовов: текущий метод немедленно завершается, и исключение передаётся методу, который его вызвал, — процесс повторяется, пока не найдётся подходящий catch или исключение не достигнет main. По пути на каждом уровне выполняются блоки finally, а при отсутствии обработчика JVM завершает поток и печатает stack trace. Как это работает подробнее Распространение (exception propagation) начинается с места выброса исключения: текущий метод завершается, и исключение передаётся вызвавшему методу. Если подходящего catch нет, процесс идёт выше — по всему стеку вплоть до main. При прохождении каждого уровня выполняются все блоки finally, даже если исключение на этом уровне не перехватывается. Когда catch найден, выполнение продолжается после этого блока. Для checked-исключений распространение «узаконено» объявлением throws в сигнатурах методов на пути; unchecked-исключения (RuntimeException и Error) проходят через любые методы без объявлений. Блоки catch ра
callstackexceptions
SeniorPython Developer > Основы Python > Декораторы
Короткий ответ Такой декоратор строится как фабрика декораторов с тремя уровнями вложенности: внешняя функция принимает параметры, средняя — декорируемую функцию, а самая внутренняя обёртка выполняет работу. Параметры попадают в обёртку через замыкание. Как это работает подробнее Три уровня. Обычный декоратор имеет два уровня, а параметризованный — три, потому что параметры должны «дойти» до внутренних функций через замыкание. Синтаксис. Запись @decorator(params) означает, что сначала вызывается decorator(params), возвращающая декоратор, который затем применяется к функции: func = decorator(params)(func). Роли функций. Внешняя функция принимает и запоминает параметры, средний уровень принимает декорируемую функцию, а внутренний wrapper работает при вызове. Фабрика декораторов. Паттерн удобен, когда нужна одна и та же логика обёртки, применяемая с разными настройками. Пример кода Что использовать на практике Параметризация. Используй фабрику декораторов, когда одна и та же обёртка нужна с разными значениями на
argumentsclosures
MiddlePython Developer > Основы Python > Базы данных и SQL
Короткий ответ Django подключается к базе данных через словарь DATABASES в файле settings.py. Ключ ENGINE выбирает бэкенд, например sqlite3, PostgreSQL или MySQL, а остальные параметры описывают имя базы и учётные данные. После настройки нужно применить миграции командой python manage.py migrate. Как это работает подробнее По умолчанию Django использует SQLite, но конфигурацию можно переключить на PostgreSQL, MySQL или Oracle. Движок. Ключ ENGINE задаёт бэкенд: django.db.backends.sqlite3, postgresql или mysql. Параметры подключения. NAME, USER, PASSWORD, HOST и PORT содержат имя базы данных и учётные данные. Драйвер. Python-приложение общается с базой через драйвер СУБД, реализующий стандарт DB-API, например psycopg2 для PostgreSQL. ORM. Django поверх драйвера работает через собственный слой доступа к данным, транслируя операции с моделями в SQL. Миграции. После настройки выполняется migrate, чтобы Django создал необходимые таблицы. Пример кода Что использовать на практике Для старта. На этапе прототипа подой
databasedjango
MiddlePython Developer > Основы Python > Алгоритмы и типовые задачи
Короткий ответ Уникальность элементов проверяется превращением списка во множество: если длина не изменилась, дубликатов нет — len(data) == len(set(data)). Частоту символов или слов удобно считать через collections.Counter, который возвращает словарь вида «элемент — количество вхождений». Как это работает подробнее Обе задачи решаются структурами с быстрым доступом: set отвечает на вопрос о дубликатах, а словарь хранит счётчики вхождений. Множество против списка. Множество хранит только уникальные элементы, поэтому равенство длин списка и множества означает отсутствие повторов. Скорость операций. Добавление и проверка вхождения в set и dict выполняются в среднем за O(1), поэтому весь проход занимает O(n). Поиск дубликатов. Чтобы найти сами повторы, иди по списку и складывай элементы в set, отмечая те, что уже встречались. Counter. collections.Counter — подкласс словаря, который сам подсчитывает количество вхождений элементов итерируемого объекта. Частота слов. Текст разбивают на слова через split(), а lower()
dictduplicates
JuniorPython Developer > Основы Python > Алгоритмы и типовые задачи
Короткий ответ Палиндром — строка, которая читается одинаково слева направо и справа налево. Простейший способ проверки на Python — сравнить строку с её перевёрнутой копией: s == s[::-1]. Алгоритмический вариант — метод двух указателей, которые движутся от концов к центру и останавливаются при первом несовпадении. Как это работает подробнее Самый короткий путь — срез с шагом -1, который разворачивает строку; метод двух указателей даёт тот же результат без создания копии, поэтому его чаще ждут в задачах. Срез с шагом -1. s[::-1] возвращает строку в обратном порядке, после чего достаточно сравнить её с оригиналом. Функция reversed. ''.join(reversed(s)) — альтернатива срезу: разворот итератора и склейка символов в новую строку. Два указателя. Индексы идут от концов строки к центру, и при первом несовпадении символов сразу ясно, что перед нами не палиндром. Проверка половины. Достаточно сравнить len(s)//2 зеркальных пар, поэтому генератор all(s[i] == s[-i-1] for i in range(len(s)//2)) тоже даёт ответ. Пример кода
algorithmscomparison
MiddlePython Developer > Основы Python > Алгоритмы и типовые задачи
Короткий ответ Две строки являются анаграммами, если содержат одни и те же символы с одинаковыми частотами. Простейший способ проверки на Python — сравнить отсортированные версии: sorted(s1) == sorted(s2). Более эффективный — подсчитать частоты символов через словарь или collections.Counter, что даёт линейное время. Как это работает подробнее Анаграмма — это не просто одинаковый набор символов, а одинаковые символы с одинаковыми частотами, поэтому проверка всегда сводится к сравнению этих частот. Сортировка. У анаграмм совпадают отсортированные последовательности символов, что даёт короткое решение, но сортировка стоит O(n log n). Длины строк. Строки разной длины не могут быть анаграммами, поэтому такую проверку выполняют первой. Словарь частот. Проход по строкам с подсчётом символов даёт O(n + m): остаётся сравнить полученные словари частот. Counter. collections.Counter сам подсчитывает вхождения, а сравнение двух Counter эквивалентно сравнению частот всех символов. Массив счётчиков. Для строчных букв латини
anagramscounting