Senior Python Developer
43.9K subscribers
2.08K photos
5 videos
1 file
525 links
№ 4931117861
Публикуем интересные/полезные фичи/библиотеки языка.

По вопросам сотрудничества: @adv_and_pr

Канал на бирже:
https://telega.in/c/seniorpy
Download Telegram
3D визуализация на Python

Vpython — относительно простая библиотека для демонстрации физических явлений. В примере создаём вращающийся куб.

В начале программы создаём сам куб, задавая параметры, сохраняем его в переменную, а затем для вращения создаём бесконечный цикл. Документация:
https://www.glowscript.org/docs/VPythonDocs/index.html
Что такое глубокая копия?

Глубокая копия используется для хранения значений, которые уже скопированы. Глубокая копия не копирует ссылочные указатели на объекты.

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

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

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

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

Термины "протокол итератора" или "протокол дескрипторов" уже привычны и используются давно. Но теперь можно описывать протоколы в виде кода и проверять их соответствие на этапе статического анализа.

Протокол описывается как обычный класс, наследующийся от Protocol. Он может иметь методы (в том числе с реализацией) и поля. Реальные классы, реализующие протокол могут наследоваться от него, но это не обязательно, как показано в примере.

Хоть это и не совсем интерфейсы, но все же классная штука. Еще важно, что протоколы, как и все остальные фишки аннотаций типов, используются в основном со статически типизированным mypy.

#typing #аннотации
Функции только с позиционными параметрами

Если с помощью inspect посмотреть на то, как объявлена встроенная функция float, то увидим, что есть входной параметр x и еще какой-то непонятный слэш.

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

Такое поведение как раз задает тот слэш. Параметры, записанные до него, можно передать только как позиционные. После него – как угодно, все будет работать стандартно.
Тестирование на pytest

pytest — ближе по духу к Python нежели unittest, который накладывает определенные обязательства при разработке тестов. Например, создание классов-наследников от TestCase или выполнение определенной процедуры запуска тестов.

При разработке на pytest ничего этого делать не нужно. Вы просто пишете функции, которые должны начинаться с "test_" и используете assert, встроенные в Python.

Также он поддерживает запуск тестов на unittest и nose, то есть полная обратная совместимость с ними.
Узнаём курс доллара при помощи Python в 2 строчки

Пакет forex-python позволяет получать данные о курсе валют и конвертировать одну валюту в другую. Программа на картинке позволяет нам узнать курс доллара относительно многих других валют мира. Вместо "USD" можно вставить любую другую валюту и получить актуальное соотношение.
Получаем ежедневные новости с помощью Python

Для реализации нам нужно установить библиотеки requests и BeautifulSoup.
pip install bs4
pip install requests

Подробный разбор и описание кода можно найти здесь.
Как удалить пробелы из начала строки (из её левой части), из её конца (из правой части), или с обеих сторон строки?

Здесь нам пригодятся, соответственно, методы lstrip(), rstrip() и strip().
Экономия памяти с помощью __slots__

Если вы когда-нибудь писали программы, которые создают по-настоящему большие количества экземпляров некоего класса, то вы могли заметить, что таким программам неожиданно может понадобиться очень много памяти. Происходит это из-за того, что Python использует словари для представления атрибутов экземпляров классов. Это хорошо сказывается на производительности, но, с точки зрения потребления памяти, это неэффективно. Обычно, правда, проблем эта особенность не вызывает. Однако если вы столкнулись в подобной ситуации с нехваткой памяти — можете попробовать воспользоваться атрибутом slots.

Здесь, когда мы объявляем атрибут slots, Python использует для хранения атрибутов не словарь, а маленький массив фиксированного размера. Это серьёзно сокращает объём памяти, необходимый для каждого из экземпляров класса. У применения атрибута slots есть и некоторые недостатки. Так, пользуясь им, мы не можем объявлять новые атрибуты, мы ограничены только теми, которые имеются в slots. Кроме того, классы c атрибутом slots не могут использовать множественное наследование.
Функции, поддерживающие только именованные аргументы (kwargs)

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

Это может быть полезно для того, чтобы улучшить понятность кода. Как видите, наша задача легко решается при помощи использования аргумента * перед списком именованных аргументов. Здесь, что вполне очевидно, можно использовать и позиционные аргументы — в том случае, если поместить их до аргумента *.
Присоединяйтесь к бесплатному мини-курсу «Симулятор профессии дата-сайентист»

За 3 дня с нуля создадите виртуального робота-помощника (как Siri, Олег или Маруся) и решите несколько типичных задач дата-сайентиста, чтобы понять, подходит ли вам это направление

А еще:

- поймете, какие навыки нужны для работы в Data Science
- познакомитесь с языком Python
- узнаете о библиотеках Pandas, Plotly, Numpy
- освоите основы машинного обучения
- поработаете с Google Colab
- напишете AI-driven прототип

Все участники получат подарки: чек-листы и гайды, и чтобы больше узнать о профессии, бессрочный доступ к курсу «Основы Python: пишем чат-бота»

Записаться на мини-курс и забрать подарки
Преобразование списка в словарь без zip

В этом примере мы преобразуем список формата [key_1, value_1, key_2, value_2] в словарь {key_1: value_1, key_2: value_2}.

Пример преобразования представлен на картинке.
docstring

docstring — это строковый литерал, который по PEP должен быть сразу после определения названия для модуля, функции, класса или метода. Создаётся с помощью трех двойных кавычек.

В Python docstring игнорируются интерпретатором и не могут быть выполнены. Однако, когда вы добавляете docstring в модуль, функцию и так далее, эта строка становится специальным атрибутом, к которому можно получить доступ через __doc__.
Метод compress()

Метод compress() модуля itertools создает итератор, который фильтрует элементы из данных s, возвращая только те, которые имеют соответствующий элемент, равный True или 1 в последовательности lst.
Извлекаем домен из URL-адреса с помощью Python

Для анализа домена URL-адреса в Python 3 вы можете использовать следующую конструкцию.

Однако для надежного парсинга домена верхнего уровня (example.testв данном примере) необходимо установить специализированную библиотеку (например, tldextract).
Метод file.writelines()

Метод файла file.writelines() записывает последовательность (список) строк в файл file.

Последовательностью может быть любой итерируемый объект, содержащий в качестве элементов строки. Обычно это список строк.

Обратите внимание, что метод file.writelines() не добавляет разделители строк автоматически. Если они требуются, то добавляйте их вручную.
Создание капчи

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

В Python капчу реализовать можно довольно просто — с использованием пары модулей сначала создаётся картинка, затем сохраняется в определённый файл. Результат выполнения программы вы можете увидеть на картинке снизу.
Деструкторы

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

Переопределение деструкторов на практике встречается редко, но на случай каверзных вопросов на собеседованиях стоит знать об этой особенности.
➡️ Использование библиотеки aiometer для конкурентного выполнения асинхронных задач

aiometer позволяет эффективно управлять количеством одновременно выполняемых асинхронных задач. Это полезно, когда нужно ограничить количество параллельно выполняемых задач, избегая перегрузки системы.

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

🔗 Ссылочка на доку
Please open Telegram to view this post
VIEW IN TELEGRAM
➡️ Использование модуля ast для анализа и модификации исходного кода Python

Модуль ast (Abstract Syntax Tree) позволяет анализировать и модифицировать исходный код Python на уровне его абстрактного синтаксического дерева (AST). Это мощный инструмент для тех, кто хочет динамически изменять код, строить анализаторы или трансформировать Python-программы на лету.

🗣 Этот модуль предоставляет доступ к внутренним структурам Python, что делает его полезным для статического анализа кода или автоматического изменения исходного текста программы.

✔️ ast открывает множество возможностей для тех, кто занимается метапрограммированием или созданием собственных инструментов для анализа и оптимизации Python-кода.
Please open Telegram to view this post
VIEW IN TELEGRAM