Python Academy — один канал вместо тысячи учебников Чат канала: @python_academy_chat Сотрудничество: @zubar89 Канал включён в перечень РКН: https://rkn.link/TVu
Оператор неравенства и Дядя Бэрри
Вспомним немного историю: 1 апреля 2009 года выпустили PEP 401, в котором говорилось, что Гвидо ван Россум покидает команду Python.
На его замену должен был прийти Barry Warsaw, который имел официальный статус Friendly Language Uncle For Life (FLUFL) — в переводе, дружелюбный дядя языка на всю жизнь.
И этот Дядя Бэрри предложил заменить "противный" знак неравенства !=
на <>
. Изменения обещали выпустить в последующих версиях, но его можно было протестировать и раньше времени.
Для этого можно импортировать barry_as_FLUFL
из пакета __future__
. Результат можете посмотреть на картинке сверху.
Это всё, конечно же, было первоапрельской шуткой, но оператор <>
всё ещё доступен и является некой пасхалкой.
#пасхалка
🎁 Приглашаем на бесплатный урок курса «Python Developer»
📅 Когда: 27.07.23 в 20:00 мск
Тема: Декораторы в Python: инструменты начинающего разработчика для улучшения кода!
На занятии:
- Познакомитесь с декораторами: что такое декораторы, как они помогают упростить модификацию существующих функций, научитесь использовать встроенные декораторы и создавать свои;
- Разберем работу декораторов: проведем подробный разбор того, как работают декораторы в Python, узнаете, как создавать и применять простые декораторы и декораторы с дополнительными аргументами.
- Разберем создание декораторов: научимся создавать свои декораторы, которые позволят добавлять дополнительную функциональность к функциям.
👉 Чтобы попасть на урок и получить запись вебинара нужно зарегистрироваться https://otus.pw/dH94/
Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963. erid: 2RanynRDf3v
Делегирующие генераторы
Давайте создадим простенькую генераторную функцию subgen
, которая будет возвращать числа от 0 до переданного аргумента.
А также ещё одну генераторную функцию delegator
, которая будет возвращать числа из итерируемого объекта source
, который передадим в качестве аргумента.
Цикл, который можно написать в delegator
, можно заменить всего лишь одной строчкой. То есть yield from
заменяет цикл for
, в котором только возвращаются значения через yield
.
Грубо говоря, такая конструкция является неким туннелем передачи данных туда и обратно. В нашей ситуации delegator
можно назвать делигирующим генератором, а subgen
подгенератором.
#генераторы
Аргументы и параметры командной строки
Для обработки передаваемых аргументов и создания удобный интерфейс командной строки в python есть отличный модуль argparse
.
Для начала нам нужно создать объект парсера ArgumentParser
, в который мы уже сможем добавить аргументы с нужными параметрами с помощью метода add_argument
.
Первым параметром add_argument
принимает либо имя обязательного позиционного аргумента, либо список опционального аргумента (опциональный аргумент идентифицируется через -
). Также у add_argument
есть множество необязательных опциональных параметров для работы с передаваемым значением аргумента, о них можете почитать в данной статье.
После добавления всех аргументов, нам нужно их спарсить с помощью метода parse_args
, на выходе мы получим объект со всеми содержащимися аргументами.
#argparse
Превращаем PDF в текст
Думаю, все периодические работают с PDF-документами. И зачастую это ручная и скучная работа. Но Python может автоматизировать даже такую рутинную задачу.
Модуль pdftotext
создан именно для работы с документами в PDF формате. Устанавливается он через пакетный менеджер pip
, а использовать его проще простого. Все основные операции представлены на картинке выше.
Кстати, здесь ещё интересно то, что исходный код модуля написан на C++. Поэтому есть небольшая вероятность, что придётся повоевать с зависимостями.
#pdftotext
Станьте дипломированным специалистом по Data Science и Machine Learning за 4 года на онлайн-бакалавриате от РАНХиГС и Skillbox.
Всё как в классических вузах, только онлайн.
За время обучения вы:
— Освоите язык программирования Python, основные библиотеки и фреймы для работы с ним.
— Подтянете английский для работы с источниками и профильной литературой, повторите основы математики и статистики для аналитики данных.
— Изучите машинное обучение, нейросети, deep learning, data engineering.
— Освоите soft skills для работы в IT: научитесь управлять производством, проектами и командой.
А по итогу обучения соберёте портфолио из более чем 10 работ и получите диплом государственного образца.
Успейте подать заявку прямо сейчас по ссылке: https://epic.st/L1R5VQ
После этого с вами свяжется специалист приёмной комиссии.
Реклама. ЧОУ ДПО «Образовательные технологии «Скилбокс (Коробка навыков)», ИНН: 9704088880
Ещё вчера они отвечали за код и технологии, а сегодня в их подчинении специалисты, к которым никто не приложил инструкцию. Да, быть начинающим управленцем в IT — рискованно, но интересно. Открывается много новой информации и определений.
Насчёт определений — в карточках собрали несколько ключевых, которые познакомят вас с профессией руководителя в IT поближе. А по поводу новой информации: в Практикуме появился курс по управлению командой разработки с воркшопами, личными консультациями и интерактивным учебником.
Пройдите первый бесплатный урок
Создаем бесконечный итератор
Функция cycle()
из itertools
принимает на вход итерируемый объект и создает бесконечный итератор, циклически возвращающий элементы данного объекта.
Фишка заключается в том, что когда элементы последовательности заканчиваются, итерация начинается вновь с первого элемента.
Но если вы проходитесь циклом по такому итератору, то важно предусмотреть выход из цикла, иначе он станет бесконечным (как у нас в первом случае на картинке).
Мы также можем воспользоваться islice()
, который вернет итератор по подмножеству переданного объекта.
#itertools
Влетаем в мир ИИ с ноги — без опыта и знаний кодинга. Всего за 3 вечера эксперты научат вас создавать нейросети и применять их на практике.
Ваши нейронки смогут:
— Делить людей на входящих и выходящих из автобуса
— Обнаруживать возгорания
— Оценивать стоимость квартир и резюме соискателей
— Прогнозировать стоимость полиметаллов
— Распознавать команды умного дома и много чего ещё
Интенсив идеален для начинающих в области ИИ, а также для тех, кто хочет прокачать свои знания по последним технотрендам.
Бесплатный интенсив ждёт вас по ссылке.
Собрать свой ИИ теперь можно с нуля. Без всякого опыта в программировании! Вас научит основатель Университета Искусственного Интеллекта Дмитрий Романов. За 2 дня под его руководством вы создадите сразу 12 нейросетей.
Если вы хотите поближе познакомиться с тем, как работают технологии вроде ChatGPT, Stable Diffusion, а также разобраться в генерации и распознавании речи — этот интенсив для вас.
Зарегистрироваться на легендарный интенсив можно по ссылке.
Функция itertools.cycle
В пайтон есть классный модуль itertools
для создания собственных итераторов. Функции данного модуля довольно эффективны в работе, поэтому их часто используют в реальных проектах.
Сегодня мы бы хотели показать вам функцию cycle()
из itertools
. Данная функция принимает на вход итерируемый объект и создает бесконечный итератор, циклически возвращающий элементы данного объекта. Фишка заключается в том, что когда элементы последовательности заканчиваются, итерация начинается вновь с первого элементы.
К примеру, функция cycle()
из последовательности ['red', 'white', 'blue']
генерирует повторяющуюся бесконечную. Но важно при проходе при итерации по такому итератору предусмотреть выход из цикла (а не как у нас в первом случае с colors:). Так как это итератор, то мы можем использовать его для получения значений через функцию next(colors)
.
Мы также можем воспользоваться islice()
, который вернет итератор по подмножеству переданного объекта.
#генераторы #itertools
Генерируем анекдоты
Не самый полезный, но весьма интересный пакет pyjokes
выдает различные шутки и анекдоты на 6 языках. Но русский, к сожалению, в это число не входит.
Метод get_joke()
возвращает строку, которая хранит в себе случайную шутку. В аргументы можно указать язык, по умолчанию стоит английский.
Также можно указать категорию в аргументах — особенно классно заходят штуки про Чак Норриса с пометкой 'chuck'
.
#pyjokes
Именованные кортежи
Кортежи tuple
, по своей сути, являются неизменяемыми списками. Структура данных удобная, но мы можем получать данные, используя только числовые индексы.
Нет возможности дать имена отдельным элементам, сохранённым в кортеже. Это может повлиять на читаемость кода. И в таком случае используют именованные кортежи namedtuple
из collections
.
Каждый объект в именованном кортеже может быть доступен через уникальный, удобный для чтения человеком, идентификатор. При этом вся функциональность от обычных кортежей сохраняется.
#namedtuple
Деструкторы
При уничтожении экземпляра класса в большинстве языков вызывается специальный метод, который называется деструктор.
В Python деструктор можно переопределять с помощью магического метода __del__
, который вызовется автоматически при удалении объекта.
Вообще деструкторы крайне редко переопределяется в Python, но полезно знать, что именно эти методы отвечают за очистку при удалении объекта.
#классы
Динамическая замена class
Многие знают, что с помощью type
можно получить тип объекта. Но не все так просто, по сути type
служит динамической заменой инструкции class
и позволяет создавать новые объекты типа во время исполнения.
Первый принимаемый аргумент является именем класса и становится атрибутом __name__
; второй аргумент является кортежем с перечисленными базовыми типами и становится атрибутом __base__
; словарь будет являться телом класса и станет атрибутом __dict__
.
#type #class
Временные файлы
В стандартной библиотеке Python есть модуль tempfile
, который содержит классы и методы для корректной работы со временными файлами и директориями.
Функция TemporaryFile
создает временный файл в системной директории и возвращает файлоподобный объект.
Созданный временный файл будет автоматически удален по закрытию файла или при выходе из контекстного менеджера.
Также другие процессы и приложения не смогут получить доступ к этому временному файлу.
#tempfile
Превью из длинного текста
Допустим, у нас есть какой-то длинный текст в виде строки и надо сделать превью этого текста, например, для сайта. Первое, что приходит на ум – использовать слайсинг строк.
Но, как видите, текст оборвался на полуслове, поэтому такой вариант отпадает. Такую проблему хорошо решает метод shorten
из модуля textwrap
.
Первым аргументом передается строка, вторым указываем количество символов, которое должен содержать результат. Также третьим аргументом можно передать заготовку, которая будет вставляться в конце обрезанной строки.
#строки #textwrap
Собрать свой ИИ теперь можно с нуля. Без всякого опыта в программировании! Вас научит основатель Университета Искусственного Интеллекта Дмитрий Романов. За 2 дня под его руководством вы создадите сразу 12 нейросетей.
Если вы хотите поближе познакомиться с тем, как работают технологии вроде ChatGPT, Stable Diffusion, а также разобраться в генерации и распознавании речи — этот интенсив для вас.
Зарегистрироваться на легендарный интенсив можно по ссылке.
Интересная пасхалка
Модуль __future__
позволяет подключать функционал из будущих версий языка. Например, можно попробовать импортировать фигурные скобки как в си-подобных языках.
Но будет вызвано исключение, которое говорит "not a chance", что означает "ни единого шанса". Однако есть ещё один интересный момент, а именно — исходный код этого модуля.
Оказывается, интерпретатор CPython сначала запускает файл future.c
, когда встречается импорт этого модуля. А само это исключение реализовано на этой строчке.
#пасхалки
Делаем планировщик задач
К моему удивлению, далеко не все знают про пакет schedule
, который позволяет планировать задачи и повторять их через промежуток времени.
Основной его плюс в том, что он максимально интуитивный и имеет гибкий функционал. А еще schedule
не требует внешних зависимостей и сам в целом легковесный.
Здесь на самом деле даже объяснять особо нечего, логика методов в этом пакете понятна на примерах.
#schedule
Сортировка пузырьком
Для сортировки списков в Python уже есть встроенные функция sorted()
и метод .sorted()
, но достаточно важно самому знать хотя бы несколько реализаций.
Суть алгоритма в том, что совершается несколько проходов по массиву. При проходе последовательно сравниваются пары элементов в массиве и в случае несоответствия выбранному порядку меняются местами. Если пары элементов находятся в верном порядке, то ничего не происходит.
В результате первого прохода максимальный элемент окажется в конце, то есть всплывет словно пузырек. Затем все повторяется до того момента пока весь массив не будет отсортирован. Последний проход будет по отсортированному массиву.
#списки #сортировка
Простой, но мощный веб-фреймворк
Самым популярным фреймворком для разработки серверной части на Python является Flask. К слову, он обгоняет даже Django по звездам на GitHub.
Flask предназначен для быстрого и легкого старта работы с возможностью масштабирования до сложных приложений. А коммьюнити предоставляет множество расширений для фреймворка.
Для создания минимального рабочего приложения достаточно кода выше. После запуска такого скрипта можете перейти в браузере по адресу http://localhost:5000/
и посмотреть результат.
#модули
Аннотации типов
Python имеет динамическую типизацию и позволяет нам оперировать переменными разных типов, и иногда у нас бывают ошибки, связанные с некорректной передачей данных неверного типа.
В современных версиях 3.6+ добавилась поддержка аннотации типов переменных, полей класса,аргументов и возвращаемых значений.
#typing
Определение литеральных типов
Когда нам может понадобится определить из полученной строки литеральный тип (строки, числа, списки, кортежи, словари, логические значения и None), мы можем воспользоваться функцией literal_eval()
из модуля ast
.
Данная функция поможет безопасно определить литеральный тип, а в случае если был передан не литерал, то выбросит исключение. Это можно использовать для оценки выражений из внешних источников при парсинге файлов, либо пользовательского ввода.
#ast #literal_eval
Функция reduce
Модуль functools
позволяет хорошо раскрыть функциональные возможности Python. Например, в functools
есть интересная функция reduce
, которая позволяет «сжимать» данные, применяя последовательно функцию и запоминая результат.
Таким образом, в примере выше reduce
умножает 1 на 2, затем результат этого умножения на 3 и так далее.
#функции #reduce
Проверяем скорость интернета
Каждый хоть раз проверял скорость своего интернета на Speedtest. А у них, оказывается, есть не только сайт и приложения, но и пакет на Python для этого дела.
У объекта класса Speedtest
методы download()
и upload()
выдают соответственно скорость скачивания и загрузки данных.
Методы отдают результат в байтах, поэтому для наглядности в примере я перевел все данные в мегабайты при выводе.
#speedtest
Используйте dict.get() вместо dict[]
Есть несколько способов получения значений из словарей, и даже по такой теме разработчики часто спорят.
Многие получают значения по ключам через квадратные скобки, но если такого ключа нет, то будет вызвано исключение.
Поэтому мы считаем, что лучше использовать метод get
у словарей. Его основной плюс заключается в том, что он принимает опциональный аргумент, отвечающий за значение по умолчанию.
Таким образом, если значение по ключу не найдено, то вернется дефолтное значение.
В итоге, мы убираем возможные ошибки в случае, если нужных ключей в словаре нет.
#словари
Тут рассказывают, как работает performance review в Авито — подробный гайд составил их директор по аналитике Илья Гуров. Для больших команд аналитиков, где спецов выше мидла может быть несколько, это просто золото. Грамотная система ревью позволяет руководителю понятно описать грейды и получить адекватное представление о росте сотрудников, компетенциях и карьерных ожиданиях.
Если коротко, то у Авито все устроено так:
1. Self-review. Сотрудник предъявляет собственные результаты.
2. Сбор отзывов от коллег, которые участвовали в тех же проектах или заинтересованы в результатах.
3. Оценка компетенций. Руководитель собирает артефакты и доказательства по всем компетенциям.
4. Калибровка оценок между руководителями. Это защита оценки перед другими менеджерами с презентацией и фасилитатором. Душно, но эффективно.
Все это проводят каждые полгода. Так отдел аналитики достигает сразу нескольких целей: у сотрудников есть прозрачный карьерный путь и мотивация, руководитель в курсе всех процессов, а еще у всех менеджеров синхронизируются ожидания.
Проводите у себя ревью? Поделитесь лайфхаками в комментах!
Параллельное и асинхронное программирование развязывают руки разработчикам и усиливают их скиллы: помогают выдерживать нагрузки и писать эффективный код, не теряя скорости разработки — ни один крупный проект не обходится без них. Для тех, кто решил изучить принципы асинхронности в Яндекс Практикуме есть курс «Асинхронное программирование на Python». Курс подойдет вам, если:
• у вас есть опыт написания кода на Python;
• вы знакомы с принципами ООП и умеете их применять;
• вы умеете работать с консолью и Git, настраивать рабочее окружение;
• вы понимаете работу БД и SQL, знакомы с HTTP и REST.
На всех этапах вас будут сопровождать опытные разработчики: мы не дадим просесть по учёбе и поможем выкроить время на образование. Вы будете практиковаться на реальных кейсах и положите в портфолио работающие проекты. А карьерные консультации подготовят вас к разговору о повышении или помогут с поиском новой работы.
Начать учиться
Аннотации типов
Всем известно, что Python – язык с динамической типизацией. Аннотации типов нужны для того, чтобы повысить информативность исходного кода, но они никак не влияют на поведение программы.
Типы данных указывается через двоеточие после имени переменной после её создания. Для примера создадим словарь с числами и список, состоящий из значений этого словаря, а также функцию для сложения двух чисел.
Однако помните, что аннотации типов не влияют на ход исполнения программы, поэтому в ранее написаную функцию мы с таким же успехом можем передать и строки, хотя указывали целочисленный тип данных.
#типы_данных #аннотации