Python Academy
49.5K subscribers
1.08K photos
2 videos
374 links
Python Academy — один канал вместо тысячи учебников

Чат канала: @python_academy_chat

Сотрудничество: @zubar89

Канал включён в перечень РКН: https://rkn.link/TVu
加入频道
Функции только с именованными аргументами

Для того чтобы при использовании некоторой функции сделать так, чтобы ей можно было бы передавать только именованные аргументы, можно использовать аргумент * перед списком именованных аргументов.

Таким образом, если просто передать два аргумента в функцию, то возникнет исключение TypeError. Но если передать их как именованные аргументы, то всё будет работать отлично.

Такой прием может быть полезен для того, чтобы улучшить понятность кода. Здесь, что вполне очевидно, можно использовать и позиционные аргументы – в том случае, если поместить их до *.

#функции
Полезно удалёнщикам: 10 лучших городов мира, где идеально соблюдается баланс между работой и личной жизнью. Рейтинг составило издание Business Insider с консалтинговой компанией Kisi.

1. Осло 🇳🇴
2. Берн 🇨🇭
3. Хельсинки 🇫🇮
4. Цюрих 🇨🇭
5. Копенгаген 🇩🇰
6. Женева 🇨🇭
7. Оттава 🇨🇦
8. Сидней 🇦🇺
9. Штутгарт 🇩🇪
10. Мюнхен 🇩🇪

8 из 10 городов находятся в Европе. В десятку лучших не попал ни один город США. Наилучшую позицию среди американских городов в расширенном списке занял Сиэтл, он на 32 месте. Почти треть городов в топ-30 — из Германии. Россия в топ-100 не представлена.

В рейтинге учитывали безопасность, здравоохранение, доступность удалённых рабочих мест и количество дней оплачиваемого отпуска по уходу за ребёнком. Также анализ учитывал факторы открытых пространств, качество воздуха и инфляцию.
Находим файлы по шаблону

Основной фишкой модуля glob является удобная и лаконичная работа с поиском файлов по паттернам. Более того, можно даже пройтись по директориям рекурсивно.

В одноименный метод glob передаётся шаблон для поиска файлов, а возвращается список с результатами. Все методы следуют механизму и правилам сопоставления паттернов в стиле Unix.

Вообще модуль является встроенным, но в некоторых ситуациях импорт может выдать исключение. В таком случае надо просто его переустановить через пакетный менеджер pip.

#glob
Разница между генераторными выражениями и генераторами коллекций

Записи в первой и второй строчке в коде выше очень похожи, но различаются видами скобок. В генераторе списка они квадратные, а в генераторном выражении – круглые.

Распечатав переменные, можно заметить, что значением переменной a является список, а переменная x хранит в себе объект генератора. И здесь возникает вопрос, что же использовать.

Если вам нужен результат, например в виде списка, прямо сейчас для дальнейшего выполнения программы, то используйте генераторы коллекций.

А если же значения понадобятся еще не скоро или вообще неизвестно, понадобится ли они вообще, то предпочтительнее генераторы, чтобы не занимать лишнюю память и не нагружать систему.

#генераторы
Перегрузка операторов

Сначала стоит напомнить, что методы, которые начинаются и заканчиваются двойными нижними подчеркиваниями, называются магическими.

Например, выше в классе Point мы определили __str__, который отвечает за то, как выводятся объекты класса на экран.

Для перегрузки оператора "+" нужно определить метод __add__. Он принимает два аргумента, которыми являются, соответственно, операнды в операции сложения.

Таким образом, когда разработчик пишет запись p1 + p2, интерпретатор воспринимает это в виде Point.__add__(p1, p2). Для всех операторов в языке, включая и логические, есть свои магические методы.

#классы
Абстрактные классы и методы

В абстрактном классе обычно реализуется общая часть нескольких сущностей или другими словами – абстрактная сущность.

Абстрактный метод – это метод, который не имеет своей реализации в базовом классе, и он должен быть реализован в классе-наследнике. 

Для того, чтобы создать абстрактный класс с абстрактными методами, надо импортировать вспомогательные метакласс ABCMeta и декоратор abstractmethod из модуля abc.

Если мы отнаследуем новый класс от абстрактного класса, не переопределив абстрактные методы, в данном случае method, и попробуем создать экземпляр, то получим исключение TypeError.

Для того, чтобы код заработал корректно, нам необходимо переопределить все абстрактные методы. То есть по сути еще раз просто написать метод, но уже в новом классе.

UPD. В коде опечатка, в классе GoodExample метод должен называться method, а не function.

#классы #метаклассы #abc
Упрощение создания операторов сравнения

Для создания объектов с поддержкой операторов сравнения в классе обычно требуется реализовать большое количество магических методов, а именно – __lt__, __le__, __eq__, __ne__, __gt__, __ge__.

Про то, что делает каждый из них расскажем отдельным постом, но сейчас покажем, как можно сильно упростить реализацию подобного класса. Для этого можно использовать декоратор total_ordering из пакета functools.

В таком случае достаточно реализовать в классе только __lt__ и __eq__. Эти два метода являются минимумом, который нужен декоратору для конструирования остальных методов.

#классы
Перегрузка операторов сравнения

В случае, если вам в коде необходимо сравнивать объекты какого-либо класса, требуется реализовать магические методы, которые вызываются при сравнении.

Например, под капотом записи a < b вызывается a.__lt__(b). Для каждого оператора сравнения существует свой магический метод. Подробнее про то, какой метод за какой оператор отвечает, выше в коде.

Писать все шесть методов получается слегка громоздко, поэтому зачастую используют декоратор total_ordering из functools. Про него, кстати, недавно писали пост.

#классы
Список импортов по умолчанию

Для ограничения импорта переменных, функций и классов по умолчанию можно использовать список __all__, в который записываются названия объектов, которые будут подключены.

Таким образом, при импорте вида from module import * из модуля c подобной записью подключатся только объекты с названиями из списка __all__.

Тем не менее, в примере выше импортировать функцию foo из такого модуля всё ещё можно, например, с помощью записи from module import foo.

#модули
Weekend Offer для ML- и RecSys-разработчиков

Команда ВКонтакте хочет найти Data Scientists, RecSys Developers и ML Developers. Они приглашают специалистов в команды VK Клипы и VK Видео, ​​Сообществ, Рекомендаций и развития сервисов и Core ML. Там, вместе с другими талантами, вы будете разрабатывать рекомендательные системы для двух крупнейших российских видеосервисов.

Команда рекомендаций и развития сервисов не просто помогает пользователям найти релевантный контент - они исследуем новые, ранее неизвестные предпочтения людей и помогаем авторам контента найти свою аудиторию. Команда сообщества занимается разными задачами - с сурового хайлоадного бэкенда с продуманными ML-алгоритмами и заканчивая креативными продуктовыми экспериментами. Команда Core ML занимается умным ранжированием ленты и подбором интересных публикаций, а также - многими другими направлениями.

20 июня — 1 июля состоится первая встреча, с вами свяжутся и договорятся о звонке, будет короткий ликбез о командах и выбор слота для индивидуального онлайн-интервью.

В субботу 2 июля пройдёт детальное знакомство. В 10:00 по Москве пройдёт выступление представителей ВКонтакте, а с 11:00 до 19:00 пройдут индивидуальные технические онлайн-собеседования. Затем, уже в воскресенье пройдёт финальное собеседование и определение лучших кандидатов на позиции ВКонтакте.
База данных на минималках

Встроенный модуль shelve позволяет сохранять и читать произвольные данные. Таким образом, можно сохранять любые Python объекты для дальнейшего использования.

Доступ к данным осуществляется с помощью ключей, как и в случае со словарями. А метод shelve.open поддерживает протокол контекстного менеджера, то есть можно не вызывать метод close.

В документации заявляют, что такая база данных является "надежной". Но учитывая, что shelve написан на pickle, его стоит использовать только в совсем маленьких проектах.

#shelve
Сохраняем бинарные данные

Модуль pickle, который мы затронули в прошлом посте, реализует двоичные протоколы для сериализации и десериализации объектов. Вы можете сохранить любой объект, если возможно перевести каждый его атрибут в двоичный вид.

Но классы, функции и методы сохранить не получится. Здесь также важно понимать, что при сохранении объекта сохраняется строка, указывающая, к какому классу относится этот объект.

Однако будьте осторожнее, pickle не защищен от ошибочных или вредоносных данных. Никогда не извлекайте данные, полученные из ненадежных или не прошедших проверку подлинности источников.

#pickle
Аннотации типов: Union и Optional

Ранее на канале был пост про базовые аннотации типов. Но важно знать и про такие аннотации, как Union и Optional.

При необходимости допустить использование не любых типов, а только некоторых, можно использовать аннотацию Union[T, ...] с указанием списка типов в квадратных скобках.

Для объявления опциональных переменных используется Optional[T]. Такая аннотация нужна для переменных, которые либо имеют значение определенного типа, либо равны None.

Кстати, аннотация Optional[T] эквивалентна Union[T, None].

#аннотации
Однажды ты спросишь меня, чего я жду больше: дрим-джоб или One Day Offer от Сбера. Я отвечу: «One Day Offer». И ты уйдёшь, так и не узнав, что это и есть шанс получить работу мечты.

Станьте частью команды Сбера за 1 день!

Форвард среди высокотехнологичных сервисных компаний ищет дата-сайентистов в Москве и Нижнем Новгороде. Подходит, если вы технарь уровня Middle, Senior или Lead с опытом в DS/ML больше 2 лет, который без труда кодит на Python. А если работали с рекомендательными системами — ещё лучше.

Каков порядок действий?

Посещаете 25 июня One Day Offer → проходите интервью → в тот же день получаете предложение, о котором мечтали → вместе с командой Сбера создаёте платформу, которая поможет создавать персональные рекомендации в разных сферах бизнеса.

Участвовать в One Day Offer
Заменяем часть строки

Со строками в Python работать очень удобно, так как встроенных методов для них предостаточно. Одним из методов является str.replace(), который позволяет заменять части строк.

Первым аргументом передается подстрока, которая будет изменяться в исходной строке. Вторым аргументом — то, на что будет заменяться.

Также есть третий, опциональный, аргумент, который отвечает за то, сколько раз вы хотите заменить старую подстроку на новую. По умолчанию, все вхождения заменяются.

#строки
Спасти мир, исправив баги в коде? Легко!

По всей планете вдруг внезапно пошли сильнейшие ливни. Аномалия? Баги! Создатель напутал значения в коде, на котором написан наш мир, и теперь нам грозит утонуть в потоках воды с неба. Все исправить смогут только разработчики.

Помогите Создателю и решите три задачи на языке Python: выбирайте неправильные части кода и отмечайте правильный ответ из предложенных. Вся надежда на вас, поторопитесь!

https://vk.cc/ceD1h5
Создаем пакеты

Пакет в Python — это, грубо говоря, папка с другими папками и модулями. Помимо разделения частей проекта, пакеты нужны для формирования пространства имен, чтобы можно работать с пакетами и модулями через точку, как в примере выше.

При импорте вида from package import * будет подключены либо все модули и объекты модуля __init__.py, либо то, что находится в переменной __all__ в том же модуле __init__.py — подробнее про эту переменную было в посте ранее.

Также примечателен файл init.py, который раньше был обязателен для создания пакетов. С версии Python 3.3 его необходимость пропала. Однако его функциональность на этом не заканчиваются.

#модули #пакеты
Завершение программы

Функция exit создана для удобства работы в интерактивном режиме, однако не рекомендуется использовать её внутри скриптов.

По факту функция просто поднимают исключение SystemExit. А при попытке вызова без скобок напишут подсказку о правильном способе выхода из интерпретатора.
  
Использовать sys.exit() стоит потому, что этот метод лежит в стандартном модуле и всегда там доступен. Также это довольно явный способ завершения программы.

#sys #exit
ИММИГРАЦИЯ В США С ЛИЦЕНЗИРОВАННЫМ ИММИГРАЦИОННЫМ АДВОКАТОМ

Всем привет!
Меня зовут Станислав Шамаев 🙋🏼‍♂️, я лицензированный бизнес-иммиграционный адвокат. Также являюсь основателем юридической компании №1 в Майами.

Я специализируюсь на визах талантов ЕВ-1А и О-1 для IT, Digital и специалистов в сфере кибербезопасности в разных сферах и проведу бесплатный СТРИМ на моем Telegram-канале ‘’Одной ногой в США’’ уже в ПЯТНИЦУ 1 июля 2022 года с разбором 3-х ключевых критериев для получения визы:

▪️которые с легкостью могут закрыть большинство специалистов в сфере IT, Digital и кибербезопасности - статьи, вклад в индустрию, конкурентная зп на рынке .

▪️ А также обсудим, что может быть вкладом в профессиональную индустрию и как его упаковать в критерий визы талантов?
Расскажу на примере реальных кейсов моих клиентов!

▪️Список самые актуальные х профессий на рынке сегодня, которые ТРЕБУЮТСЯ в США немедленно! 🇺🇸.

🔥 В конце СТРИМА отвечу на все вопросы зрителей, А также в подарок каждый зритель получит гайд по критериям виз "Простая Иммиграция" БЕСПЛАТНО.

Но и это еще не все! Каждый участник стрима получит от меня персонализированный разбор его иммиграционного кейса в течение 48 часов и БЕСПЛАТНЫЙ подбор визовой программы.

СТРИМ ПО ВИЗЕ ТАЛАНТОВ ДЛЯ IT-СПЕЦИАЛИСТОВ И СПЕЦИАЛИСТОВ В СФЕРЕ КИБЕРБЕЗОПАСНОСТИ ПРОЙДЕТ :
В 19.00 по Европе
В 20.00 по Москве
В 13.00 по Майами

Где? 👉 На канале ‘Одной ногой в США’’

Как попасть на стрим? 👉 ПОДПИШИТЕСЬ на Telegram-канале "Одной ногой в США'' , где вы сможете найти все подробности проведения мероприятия.

До встречи на стриме!
Статические методы

Отличие статических методов от обычных в том, что они привязаны к классу, а не объекту. То есть они могут быть вызваны напрямую у класса.

Статический метод не принимает ни объект (self), ни класс (cls) в аргументах. То есть такие методы не могут модифицировать ни объект, ни сам класс. 

Реализовать статический метод можно двумя способами. Один из них — присвоить классу новый метод, напрямую передав изначальный метод в функцию staticmethod.

Но так делать не принято, поэтому чаще всего staticmethod используют в качестве декоратора при написании методов прямо в классе.

#staticmethod