Разница между == и is
Многие разработчики не понимают разницу этих двух операторов сравнения. Из-за неправильного использования
Оператор
Но Python в целях производительности кеширует малые числа и короткие строки, поэтому возможны некоторые казусы, как в примере выше.
#тонкости
Многие разработчики не понимают разницу этих двух операторов сравнения. Из-за неправильного использования
==
и is
в приложениях могут возникнуть странные ошибки.Оператор
==
проверяет равенство значений двух объектов. А оператор is
проверяет идентичность самих объектов. Его используют, чтобы удостовериться, что переменные указывают на один и тот же объект в памяти.Но Python в целях производительности кеширует малые числа и короткие строки, поэтому возможны некоторые казусы, как в примере выше.
#тонкости
Форматируем строку для URL-адреса
Для начала стоит вспомнить, что слаг (slug) — это уникальная строка-идентификатор, понятная человеку и содержащая только "безопасные" символы: латинские символы в нижнем регистре, цифры и дефис.
Чаще всего такое понятие можно встретить в контексте URL-адресов. Например, можно формировать слаг из названия какой-нибудь статьи и вставлять его в ссылку, чтобы людям было понятно, куда они переходят.
Выше в коде мы написали простую функцию, где использовали методы
Также для удаления некоторых символов и замены на знак дефиса были использованы регулярные выражения и встроенный пакет
#строки #re
Для начала стоит вспомнить, что слаг (slug) — это уникальная строка-идентификатор, понятная человеку и содержащая только "безопасные" символы: латинские символы в нижнем регистре, цифры и дефис.
Чаще всего такое понятие можно встретить в контексте URL-адресов. Например, можно формировать слаг из названия какой-нибудь статьи и вставлять его в ссылку, чтобы людям было понятно, куда они переходят.
Выше в коде мы написали простую функцию, где использовали методы
lower()
для приведения в нижний регистр и strip()
для удаления пробелов слева и справа. Также для удаления некоторых символов и замены на знак дефиса были использованы регулярные выражения и встроенный пакет
re
для работы с ними. #строки #re
Простой, но мощный веб-фреймворк
Самым популярным фреймворком для разработки серверной части на Python является Flask. К слову, он обгоняет даже Django по звездам на GitHub.
Flask предназначен для быстрого и легкого старта работы с возможностью масштабирования до сложных приложений. А коммьюнити предоставляет множество расширений для фреймворка.
Для создания минимального рабочего приложения достаточно кода выше. После запуска такого скрипта можете перейти в браузере по адресу
#модули
Самым популярным фреймворком для разработки серверной части на Python является Flask. К слову, он обгоняет даже Django по звездам на GitHub.
Flask предназначен для быстрого и легкого старта работы с возможностью масштабирования до сложных приложений. А коммьюнити предоставляет множество расширений для фреймворка.
Для создания минимального рабочего приложения достаточно кода выше. После запуска такого скрипта можете перейти в браузере по адресу
http://localhost:5000/
и посмотреть результат. #модули
Функции только с позиционными параметрами
Если с помощью
Однако при попытке вызвать функцию и передать туда именованный аргумент, а не позиционный, получим исключение. А если передать аргумент, явно не указывая имя параметра, то все работает.
Такое поведение как раз задает тот слэш. Параметры, записанные до него, можно передать только как позиционные. После него – как угодно, все будет работать стандартно.
#функции
Если с помощью
inspect
посмотреть на то, как объявлена встроенная функция float
, то увидим, что есть входный параметр x
и еще какой-то непонятый слэш. Однако при попытке вызвать функцию и передать туда именованный аргумент, а не позиционный, получим исключение. А если передать аргумент, явно не указывая имя параметра, то все работает.
Такое поведение как раз задает тот слэш. Параметры, записанные до него, можно передать только как позиционные. После него – как угодно, все будет работать стандартно.
#функции
Избегайте циклы с коллекциями
Представим задачу: требуется создать новый список, элементами которого будут являться квадраты чисел другого списка. Большинство сразу же напишут цикл
Но такой подход займет как минимум три строчки: объявление новой переменной, создание цикла и кода внутри него. Более того, также снижается скорость работы скрипта.
В коде выше мы привели две достойные альтернативы – генератор списка и функция
#совет
Представим задачу: требуется создать новый список, элементами которого будут являться квадраты чисел другого списка. Большинство сразу же напишут цикл
for
.Но такой подход займет как минимум три строчки: объявление новой переменной, создание цикла и кода внутри него. Более того, также снижается скорость работы скрипта.
В коде выше мы привели две достойные альтернативы – генератор списка и функция
map
. В обоих вариантах не только код становится лаконичнее, но и заметно повышается производительность.#совет
Протоколы
Термины "протокол итератора" или "протокол дескрипторов" уже привычны и используются давно. Но теперь можно описывать протоколы в виде кода и проверять их соответствие на этапе статического анализа.
Протокол описывается как обычный класс, наследующийся от
Хоть это и не совсем интерфейсы, но все же классная штука. Еще важно, что протоколы, как и все остальные фишки аннотаций типов, используются в основном со статически типизированным
#typing #аннотации
Термины "протокол итератора" или "протокол дескрипторов" уже привычны и используются давно. Но теперь можно описывать протоколы в виде кода и проверять их соответствие на этапе статического анализа.
Протокол описывается как обычный класс, наследующийся от
Protocol
. Он может иметь методы (в том числе с реализацией) и поля. Реальные классы, реализующие протокол могут наследоваться от него, но это не обязательно, как показано в примере. Хоть это и не совсем интерфейсы, но все же классная штука. Еще важно, что протоколы, как и все остальные фишки аннотаций типов, используются в основном со статически типизированным
mypy
. #typing #аннотации
Сравниваем Django и Flask
Оба фреймворка крайне мощные, но выбрать надо что-то одно. Из общеизвестных фактов: Django – самый востребованный в плане работы, Flask – наиболее производительный.
Django является более монолитным и предоставляет сразу множество инструментов из коробки, а Flask в свою очередь гибкий и минималистичный, позволяет кастомизировать архитектуру приложения.
Если в приоритете трудоустройство, то следует изучать Django. Но если вы хотите быстро начать создавать пет-проекты или изучать веб в целом, то рекомендуем рассматривать Flask.
#сравнение
Оба фреймворка крайне мощные, но выбрать надо что-то одно. Из общеизвестных фактов: Django – самый востребованный в плане работы, Flask – наиболее производительный.
Django является более монолитным и предоставляет сразу множество инструментов из коробки, а Flask в свою очередь гибкий и минималистичный, позволяет кастомизировать архитектуру приложения.
Если в приоритете трудоустройство, то следует изучать Django. Но если вы хотите быстро начать создавать пет-проекты или изучать веб в целом, то рекомендуем рассматривать Flask.
#сравнение
Превращаем PDF в текст
Думаю, все периодические работают с PDF-документами. И зачастую это ручная и скучная работа. Но Python может автоматизировать даже такую рутинную задачу.
Модуль
Кстати, здесь ещё интересно то, что исходный код модуля написан на C++. Поэтому есть небольшая вероятность, что придётся повоевать с зависимостями.
#pdftotext
Думаю, все периодические работают с PDF-документами. И зачастую это ручная и скучная работа. Но Python может автоматизировать даже такую рутинную задачу.
Модуль
pdftotext
создан именно для работы с документами в PDF формате. Устанавливается он через пакетный менеджер pip
, а использовать его проще простого. Все основные операции представлены на картинке выше. Кстати, здесь ещё интересно то, что исходный код модуля написан на C++. Поэтому есть небольшая вероятность, что придётся повоевать с зависимостями.
#pdftotext
Делаем ошибки более читаемыми
В Python есть удобный модуль
Установить его можно через пакетный менеджер
Как результат, вывод ошибок в вашей программе будет выглядеть более читаемым. Более того, разные части вывода будут помечаться разным цветом вместо монотонного серого цвета.
Также модуль можно модифицировать, указав параметры в конфиге. Подробнее можете почитать в документации модуля.
#исключения #pretty_errors
В Python есть удобный модуль
pretty_errors
, который делает стандартный вывод исключений и их traceback более удобным для чтения и красивым в целом. Установить его можно через пакетный менеджер
pip
. А для того, чтобы он заработал, достаточно импортировать его в ваш код. Как результат, вывод ошибок в вашей программе будет выглядеть более читаемым. Более того, разные части вывода будут помечаться разным цветом вместо монотонного серого цвета.
Также модуль можно модифицировать, указав параметры в конфиге. Подробнее можете почитать в документации модуля.
#исключения #pretty_errors
Форматируемые шаблоны строк
Модуль
Такой способ появился ещё в Python 2.4, как замена %-форматированию (PEP 292), но популярным так и не стал. Поддерживает передачу значений по имени и использует $-синтаксис как в PHP.
В новых проектах, конечно, используются чаще всего f-строки и иногда метод
#строки
Модуль
string
из стандартной библиотеки содержит интересный класс Template
, который позволяет вполне удобно создавать шаблоны строк для дальнейшего форматирования.Такой способ появился ещё в Python 2.4, как замена %-форматированию (PEP 292), но популярным так и не стал. Поддерживает передачу значений по имени и использует $-синтаксис как в PHP.
В новых проектах, конечно, используются чаще всего f-строки и иногда метод
format
, но всё же о Template
стоит хотя бы знать на случай, если придется работать с легаси кодом.#строки
Константы пакета string
Встроенный модуль
Сейчас поговорим про константы этого модуля. Из интересного стоит выделить
Применение подобных констант может быть не очевидно с первого взгляда. Но подобные значения часто используются, например, в работе с алфавитом или в условном генераторе паролей.
К тому же часто бывает, что разработчики делают костыли и создают свои собственные константы в коде вместо того, чтобы импортировать уже готовые из модуля
#строки #string
Встроенный модуль
string
предоставляет расширенный функционал для работы со строками. Про форматируемые шаблоны из этого пакета мы рассказывали в прошлом посте. Сейчас поговорим про константы этого модуля. Из интересного стоит выделить
ascii_letters
, punctuation
, digits
и whitespace
— символы ascii, знаки пунктуации, цифры и пробельные символы. Применение подобных констант может быть не очевидно с первого взгляда. Но подобные значения часто используются, например, в работе с алфавитом или в условном генераторе паролей.
К тому же часто бывает, что разработчики делают костыли и создают свои собственные константы в коде вместо того, чтобы импортировать уже готовые из модуля
string
. #строки #string
Работаем с zip архивами
Для упрощения работы с zip файлами можно использовать встроенный модуль
Просмотреть содержимое архива можно с помощью функции
Также этот модуль позволяет создавать свои zip архивы, но мы решили не усложнять пример, поэтому просто прикладываем ссылку на документацию.
#zipfile
Для упрощения работы с zip файлами можно использовать встроенный модуль
zipfile
. Если кто не помнит, то zip
файл – это архив, содержащий сжатые файлы. Просмотреть содержимое архива можно с помощью функции
printdir
, а извлечь все файлы можно вызвав extractfile
. Также этот модуль позволяет создавать свои zip архивы, но мы решили не усложнять пример, поэтому просто прикладываем ссылку на документацию.
#zipfile
Подключаемся к серверу по ssh
Пакет
Использовать модуль достаточно просто, пример основный методов на картинке выше. Кстати, интересный факт, Paramiko — это сочетание слов "параноик" и "друг" на языке эсперанто.
Устанавливается пакет привычным образом через пакетный менеджер pip. А документацию можете изучить тут.
#ssh
Пакет
paramiko
позволяет устанавливать соединение с удаленными машинами по протоколу SSH2 и производить там все те же операции, если бы вы подключались через, например, утилиту ssh на линуксе. Использовать модуль достаточно просто, пример основный методов на картинке выше. Кстати, интересный факт, Paramiko — это сочетание слов "параноик" и "друг" на языке эсперанто.
Устанавливается пакет привычным образом через пакетный менеджер pip. А документацию можете изучить тут.
#ssh
Переводим питонячий в человеческий
Нашел офигенный пакет
К примеру, из сложного объекта
Но что еще круче, помимо английского, пакет поддерживает много других языков, включая русский. И вообще рекомендую почитать их документацию, там много интересных функций.
#humanize
Нашел офигенный пакет
humanize
, который может переводить числа и даты в читаемый для человека текст. То есть все костыли для таких задач сразу заменяются буквально одной строчкой. К примеру, из сложного объекта
timedelta
можно получить "2 дня, 1 час и 33.12 секунд" или же "5.00 x 10²" из числа 500. Больше примеров можете посмотреть на картинке, прикрепленной к посту. Но что еще круче, помимо английского, пакет поддерживает много других языков, включая русский. И вообще рекомендую почитать их документацию, там много интересных функций.
#humanize
Находим опечатки в тексте
Полезный пакет
Под капотом модуль использует алгоритм расстояния Левенштейна. А сам код основан на статье, написанной в блоге Питера Норвига. Короче, реализация интересная, советую поизучать.
Но даже если не вникать в подробности, то пакет использовать крайне легко. Примеры использования класса
Пакет поддерживает 6 языков, включая русский. Но за подробностями отправляю вас читать документацию.
#spellchecker
Полезный пакет
spellchecker
позволяет находить опечатки в тексте и даже дает возможные варианты исправлений. Под капотом модуль использует алгоритм расстояния Левенштейна. А сам код основан на статье, написанной в блоге Питера Норвига. Короче, реализация интересная, советую поизучать.
Но даже если не вникать в подробности, то пакет использовать крайне легко. Примеры использования класса
SpellChecker
и его методов correction
и candidates
показаны на картинке. Пакет поддерживает 6 языков, включая русский. Но за подробностями отправляю вас читать документацию.
#spellchecker
Найти работу в айти можно 2 методами:
Первый. Бесконечно скроллить HeadHunter и пытаться что-то выклевать на LinkedIN. Офигеть от условий и закрыть.
Второй. Подписаться на Python Job. Это база адекватных предложений, где даже для новичков много мест с хорошей з/п.
Тут найдете работу как в Яндексе (именно сюда крупняки присылают вакансии напрямую), так и в молодых стартапах!
В общем, не теряйте времени и находите работу в 2 клика: @job_python
Первый. Бесконечно скроллить HeadHunter и пытаться что-то выклевать на LinkedIN. Офигеть от условий и закрыть.
Второй. Подписаться на Python Job. Это база адекватных предложений, где даже для новичков много мест с хорошей з/п.
Тут найдете работу как в Яндексе (именно сюда крупняки присылают вакансии напрямую), так и в молодых стартапах!
В общем, не теряйте времени и находите работу в 2 клика: @job_python
Делаем планировщик задач
К моему удивлению, далеко не все знают про пакет
Основной его плюс в том, что он максимально интуитивный и имеет гибкий функционал. А еще
Здесь на самом деле даже объяснять особо нечего, логика методов в этом пакете понятна на примерах.
#schedule
К моему удивлению, далеко не все знают про пакет
schedule
, который позволяет планировать задачи и повторять их через промежуток времени. Основной его плюс в том, что он максимально интуитивный и имеет гибкий функционал. А еще
schedule
не требует внешних зависимостей и сам в целом легковесный. Здесь на самом деле даже объяснять особо нечего, логика методов в этом пакете понятна на примерах.
#schedule
Получаем текст с картинки
У Google есть система Tesseract, которая позволяет парсить текст с картинок с помощью оптического распознавания символов.
И в качестве обертки над их системой, был создан пакет
Для того, чтобы получить текст с картинки, нужно вызвать метод
Еще важно, что для открытия картинок рекомендуется использовать
#pytesseract
У Google есть система Tesseract, которая позволяет парсить текст с картинок с помощью оптического распознавания символов.
И в качестве обертки над их системой, был создан пакет
pytesseract
, который максимально удобно и легко использовать. Для того, чтобы получить текст с картинки, нужно вызвать метод
image_to_string
. Если вас интересует текст на русском, то следует указать аургмент lang
как 'rus'
. Еще важно, что для открытия картинок рекомендуется использовать
pillow
, хоть и имеется возможность просто указать путь к файлу в виде строки. #pytesseract
Отправляем электронные письма
SMTP (Simple Mail Transfer Protocol) — это протокол, позволяющий отправлять электронные письма. В стандартной библиотеке есть пакет
Для подключения к серверу будем использовать класс
Отправлять письма можно одноименным методом
Но здесь еще следует обратить внимание на то, что некоторые почтовые сервисы могут не разрешить так сразу подключаться к их серверам и производить операции. В нашем случае пришлось немного повоевать с Gmail.
#email #smtp
SMTP (Simple Mail Transfer Protocol) — это протокол, позволяющий отправлять электронные письма. В стандартной библиотеке есть пакет
smtplib
, реализующий его поведение. Для подключения к серверу будем использовать класс
SMTP_SSL
, который включает в себя и шифрование. В его аргументы передаем адрес сервера и порт. Авторизация происходит с помощью метода login
, в который передаем соответственно логин и пароль. Отправлять письма можно одноименным методом
sendmail
, который принимает адреса отправителя и получается, а также сам текст. В конце программы следует закрывать соединение с помощью метода quit()
. Но здесь еще следует обратить внимание на то, что некоторые почтовые сервисы могут не разрешить так сразу подключаться к их серверам и производить операции. В нашем случае пришлось немного повоевать с Gmail.
#email #smtp
Forwarded from Альфа-Банк
Запустили курс по машинному обучению. Бесплатный 🧑🏻💻👩💻
Чему учим? Как применять нейросети в банковских задачах и не только.
Кому подойдёт? Всем, независимо от пола и возраста, у кого есть базовые знания в Python или в анализе данных. Учиться можно удалённо.
Это бесплатно? Да, бесплатно.
А долго учиться? Нет. Курс — это 7 онлайн-уроков по 15 минут каждый.
Где учиться? Вот ссылка 👈🏻
Приходите сами и отправьте пост родным, друзьям и коллегам — всем, кто хочет разбираться в нейросетях.
Те, кто занимаются машинным обучением, получают зарплату и за себя, и за нейросеть 🤑
@alfabank
Чему учим? Как применять нейросети в банковских задачах и не только.
Кому подойдёт? Всем, независимо от пола и возраста, у кого есть базовые знания в Python или в анализе данных. Учиться можно удалённо.
Это бесплатно? Да, бесплатно.
А долго учиться? Нет. Курс — это 7 онлайн-уроков по 15 минут каждый.
Где учиться? Вот ссылка 👈🏻
Приходите сами и отправьте пост родным, друзьям и коллегам — всем, кто хочет разбираться в нейросетях.
Те, кто занимаются машинным обучением, получают зарплату и за себя, и за нейросеть 🤑
@alfabank
Бесконечность
Вообще
Строковые литералы
Такой прием может быть полезен в коде, где требуется хранить в переменной самое большое или самое маленькое числовое значение для дальнейшего сравнения.
#float
Вообще
float
является крайне интересным типом данных и не перестает удивлять своими особенностями. Про значение Not a Number
мы уже писали, а вот сегодня поговорим про infinity
. Строковые литералы
'inf'
и 'infinity'
можно конвертировать в float
, и в результате получается значение бесконечности. Для отрицательной "бесконечности" нужно поставить знак минуса перед словом. Такой прием может быть полезен в коде, где требуется хранить в переменной самое большое или самое маленькое числовое значение для дальнейшего сравнения.
#float