Встречайте — Python-библиотека Diagrams для создания диаграмм и схем.
Отлично подойдёт для объяснения идеи продукта заказчикам партнёрам, например
pip install diagrams
from diagrams import Cluster, Diagram
from diagrams.aws.compute import ECS
from diagrams.aws.database import ElastiCache, RDS
from diagrams.aws.network import ELB
from diagrams.aws.network import Route53
with Diagram("Clustered Web Services", show=False):
dns = Route53("dns")
lb = ELB("lb")
with Cluster("Services"):
svc_group = [ECS("web1"),
ECS("web2"),
ECS("web3")]
with Cluster("DB Cluster"):
db_primary = RDS("userdb")
db_primary - [RDS("userdb ro")]
memcached = ElastiCache("memcached")
dns >> lb >> svc_group
svc_group >> db_primary
svc_group >> memcached
Первое изображение получено с помощью этого кода, остальные — пример того, что можно сделать с помощью
diagrams
@pythonl
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Создаёт временный файл как папка
tmp
в linux:import tempfile
with tempfile.NamedTemporaryFile() as tmp:
print(tmp.name)
tmp.write(...)
Чтобы не использовать временные файлы, можно использовать временный буфер сразу в программе:
from io import BytesIO
imagefile = BytesIO()
animage.save(imagefile, format='PNG')
imagedata = imagefile.getvalue()
Позволяет создавать бинарные структуры и парсить их. Может ускорить передачу между клиентом и сервером:
>> from struct import *
>> pack(">bhl", 1, 2, 3)
b'\x01\x00\x02\x00\x00\x00\x03'
>> unpack('>bhl', b'\x01\x00\x02\x00\x00\x00\x03')
(1, 2, 3)
>> calcsize('>bhl')
7
С помощью этой библиотеки можно создать полноценный tui:
Welcome to the turtle shell. Type help or ? to list commands.
(turtle) ?
Documented commands (type help <topic>):
========================================
bye color goto home playback record right
circle forward heading left position reset undo
(turtle) help forward
Move the turtle forward by the specified distance: FORWARD 10
(turtle) record spiral.cmd
(turtle) position
Current position is 0 0
Удивительно что такие полезные пакеты находятся в стандартной комплектации питона.
И не нужно скачивать кучу пакетов через
pip
.@pythonl
Please open Telegram to view this post
VIEW IN TELEGRAM
Создание облака слов на основе файла
'cl.txt'
Особенно полезно для задач NLP или при анализе соцсетей
from wordcloud import WordCloud
import matplotlib.pyplot as plt
# Read text from a file
with open('cl.txt', 'r', encoding='utf-8') as file:
text = file.read()
# Generate word cloud
wordcloud = WordCloud(width=800, height=400, background_color='white').generate(text)
# Display the generated word cloud using matplotlib
plt.figure(figsize=(10, 5))
plt.imshow(wordcloud, interpolation='bilinear')
plt.axis('off')
plt.show()
Облако слов — это визуальное представление списка категорий/тегов. Чем чаще слово встречается, тем больший размер оно принимает в облаке.
pip install wordcloud
▪Github
@pythonl
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Крутая библиотека Python, которая позволяет отображать функции в формате LaTeX
pip install latexify
То есть вы просто определяете функцию как обычно, например так:
def quadratic(a,b,c):
return (-b + math.sqrt(b**2 - 4*a*c)) / (2*a)
Чтобы вывести формулу LaTeX, мы просто помещаем над определением функции декоратор
@latexify.function
и печатаем имя функции quadratic
в ячейке Google Colab. Получается так — и мы увидем формулу:
@latexify.function
def quadratic(a,b,c):
return (-b + math.sqrt(b**2 - 4*a*c)) / (2*a)
quadratic
Отлично подойдёт тем, кто занимается на стыке IT и физики/математики/других дисциплин;
здесь в Google Colab можно затестить, как это работает
@pythonl
Please open Telegram to view this post
VIEW IN TELEGRAM
⚡️ UV: An extremely fast Python package installer and resolver, written in Rust.
Новейший инструмент для работы с зависимостями в Python
Создатели позиционируют его как замену pip, pip-tools и virtualenv, инстурмент написан на Rust.
На картинке вы видите сравнение
▪О проекте
▪GitHub
▪Docs
@pythonl
Новейший инструмент для работы с зависимостями в Python
Создатели позиционируют его как замену pip, pip-tools и virtualenv, инстурмент написан на Rust.
На картинке вы видите сравнение
uv
с другими инструментами в разрешении зависимостей (слева) и установке (справа) зависимостей Trio с использованием прогретого кеша.▪О проекте
▪GitHub
▪Docs
@pythonl
Please open Telegram to view this post
VIEW IN TELEGRAM
Instructor
Метод
instructor.patch()
для класса OpenAI вводит несколько ключевых полезных вещей:Pydantic
, чтобы упростить извлечение выходных данных.client.chat.completions.create
для отправки запроса и извлечения данных в объект Pydantic
. Параметр response_model
указывает модель Pydantic
, которую следует использовать для извлечения. Полезно аннотировать переменную типом модели ответа, что поможет вашей IDE обеспечить автозаполнение и проверку орфографии.https://pypi.org/project/instructor/
@pythonl
Please open Telegram to view this post
VIEW IN TELEGRAM
Иногда хочется, чтобы у констант были доп. параметры, хранящие прочие характеристики. Первое, что приходит на ум — это описать
Enum
, хранящий простые значения, и маппинг:from dataclasses import dataclass
from enum import Enum
class Color(Enum):
BLACK = 'black'
WHITE = 'white'
PURPLE = 'purple'
@dataclass(frozen=True)
class RGB:
red: int
green: int
blue: int
COLOR_TO_RGB = {
Color.BLACK: RGB(0, 0, 0),
Color.WHITE: RGB(255, 255, 255),
Color.PURPLE: RGB(128, 0, 128),
}
Здесь получается, что константы и характеристики располагаются сами по себе, к тому же они могут находится в разных частях системы. Это может привести к тому что при появлении новой константы в
Color
, никто не обновит маппинг, т.к. нет жёсткой и явной связи.Как же можно хранить всё необходимое в единой структуре?
Кажется, что выглядит неплохо, но в таком варианте есть ограничение по количеству дополнительных параметров. Давайте попробуем еще немного улучшить.
Раз в 1 варианте у нас получилось сделать с использованием
tuple
, то значит получится и с typing.NamedTuple
. К тому же будут именованные параметры, что повысит читабельность.В качестве члена перечисления будем хранить целиком объект
typing.NamedTuple
. Теперь чтобы у нас происходило корректное сравнение объектов нам нужно переопределить методы __hash__
и __eq__
. Сравниваться объекты будут по одному полю — value
.Получился в принципе рабочий вариант. Конечно у него есть свои ограничения, плюс решение не универсальное.
Что если вместо
typing.NamedTuple
использовать dataclass
? Вроде идея здравая. Появляется возможность наследования классов, хранящих доп. параметры. Плюс вспомогательные функции из dataclasses
.В качестве члена перечисления, как и в прошлый раз, будем хранить объект целиком, только теперь это
dataclass
.Ну вот, теперь другое дело)
@pythonl
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Если вы хотите получать уведомление, когда класс Python 🐍 становится подклассом.
Используйте:
`__init_subclass__`.
Он запускается, когда ваш класс становится подклассом. 🚀
@pythonl
Please open Telegram to view this post
VIEW IN TELEGRAM
Учите Python, он везде)
1 шаг — установка внешних библиотек
pip install python-decouple opencv-python pyzbar IMAPClient
decouple
— для чтения данных из файлаopencv
— для чтения изображения с QR-кодом pyzbar
— чтобы прочитать данные, закодированные в QR-кодеIMAPClient
— с помощью неё будем работать с сообщениями на почтовом сервереТак как мы будем использовать пароль приложений, а также логин от аккаунта Google, то в коде его желательно не использовать. Поэтому, необходимо создать файл «.env» с примерным содержимым:
login = "[email protected]"
pwd = "gffg sbbp jccj vhhi"
2 шаг — импорт библиотек
3 шаг — считывание данных из QR-кода
4 шаг — отправка письма
5 шаг — чтение почты
@pythonl
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥Подборка лучших обучающих каналов для программистов.
➡️ Делитесь с коллегами и cохраняйте себе, чтобы не потерять
🚀 Data Science
Анализ данных - полезные фишки, код, гайды и советы, маст-хэв датасаентиста
Data Jobs - ds вакансии
Аналитик данных
Data Science книги - актуальные бесплатные книги
Big data
#️⃣C#
С# академия
С# заметки — код, лучшие практики, заметки программиста c#
С# задачи и тесты
С# библиотека - актуальные бесплатные книги
C# вакансии - работа
⚡Машинное обучение
Ml Собеседование - подготовка к собеседовению мл, алгоритмам, кодингу
Ml ru - актуальные статьи, новости, код и обучающие материалы
Ml Jobs - вакансии ML
ML Книги - актуальные бесплатные книги МО
ML чат
Machine Learning - полезные статьи новости гайды и разбор кода
⚡️ Frontend
Javascript академия - крупнейший js канал
React - лучшие гайды и советы по работе с react
Frontend - тутрориалы, уроки, гайды, код
PHP
Книги frontend
Задачи frontend
🏆 Golang
Golang - подробные гайды, разбор кода, лучшие практики, заметки
Golang собеседование
Golang вакансии
Golang книги
Golang задачи и тесты
Golang чат
Golang news - новости go
🐍 Python
Python/django
Python Собеседование - подготовка к собеседовению python и разбор алгоритмов
Pro python - статьи, новости, код и обучающие материалы
Python Jobs - вакансии Python
Python чат
Python книги
☕ Java
Java академия
Java вакансии
Java чат
Java вопросы с собеседований
Java книги
🛢Базы данных
Sql базы данных
Библиотека баз данных
SQL чат
💻 C++
C++ академия
С++ книги
C++ задачи - подготовка к собеседовению мл, алгоритмам
C++ вакансии
💥 Хакинг Kali Linux
Kali linux
linux_kal - kali чат
Информационная безопасность
🐧 Linux
Linux academy
🦀 Rust
Rust программирование
Rust чат
Rust книги для программистов
📲 Мобильная разработка
Android разработка
Мобильный разработчик гайды и уроки
🇬🇧 Английский для программистов
🧠 Искусственный интеллект
ИИ и технологии
Neural - нейросети для работы и жизни
Книги ИИ
Artificial Intelligence
🔥 DevOPs
Devops для программистов
Книги Devops
🌟 Docker/Kubernets
Docker
Kubernets
📓 Книги
Библиотеки Книг для программситов
💼 Папка с вакансиями:
Папка Go разработчика:
Папка Python разработчика:
Папка Data Science
Папка Java разработчика
Папка C#
Папка Frontend
➡️ Делитесь с коллегами и cохраняйте себе, чтобы не потерять
🚀 Data Science
Анализ данных - полезные фишки, код, гайды и советы, маст-хэв датасаентиста
Data Jobs - ds вакансии
Аналитик данных
Data Science книги - актуальные бесплатные книги
Big data
#️⃣C#
С# академия
С# заметки — код, лучшие практики, заметки программиста c#
С# задачи и тесты
С# библиотека - актуальные бесплатные книги
C# вакансии - работа
⚡Машинное обучение
Ml Собеседование - подготовка к собеседовению мл, алгоритмам, кодингу
Ml ru - актуальные статьи, новости, код и обучающие материалы
Ml Jobs - вакансии ML
ML Книги - актуальные бесплатные книги МО
ML чат
Machine Learning - полезные статьи новости гайды и разбор кода
⚡️ Frontend
Javascript академия - крупнейший js канал
React - лучшие гайды и советы по работе с react
Frontend - тутрориалы, уроки, гайды, код
PHP
Книги frontend
Задачи frontend
🏆 Golang
Golang - подробные гайды, разбор кода, лучшие практики, заметки
Golang собеседование
Golang вакансии
Golang книги
Golang задачи и тесты
Golang чат
Golang news - новости go
🐍 Python
Python/django
Python Собеседование - подготовка к собеседовению python и разбор алгоритмов
Pro python - статьи, новости, код и обучающие материалы
Python Jobs - вакансии Python
Python чат
Python книги
☕ Java
Java академия
Java вакансии
Java чат
Java вопросы с собеседований
Java книги
🛢Базы данных
Sql базы данных
Библиотека баз данных
SQL чат
💻 C++
C++ академия
С++ книги
C++ задачи - подготовка к собеседовению мл, алгоритмам
C++ вакансии
💥 Хакинг Kali Linux
Kali linux
linux_kal - kali чат
Информационная безопасность
🐧 Linux
Linux academy
🦀 Rust
Rust программирование
Rust чат
Rust книги для программистов
📲 Мобильная разработка
Android разработка
Мобильный разработчик гайды и уроки
🇬🇧 Английский для программистов
🧠 Искусственный интеллект
ИИ и технологии
Neural - нейросети для работы и жизни
Книги ИИ
Artificial Intelligence
🔥 DevOPs
Devops для программистов
Книги Devops
🌟 Docker/Kubernets
Docker
Kubernets
📓 Книги
Библиотеки Книг для программситов
💼 Папка с вакансиями:
Папка Go разработчика:
Папка Python разработчика:
Папка Data Science
Папка Java разработчика
Папка C#
Папка Frontend
Please open Telegram to view this post
VIEW IN TELEGRAM
Что происходит, скажем, в случае такого генераторного выражения?
gen = (num for num in range(10))
print(*gen)
*args
и **kwargs
— это способы передачи переменного количества аргументов в функцию. Другими словами, они "распаковывают" значения из массива/словаря/множества и т.п. и передают эти значения в функцию.def test(a, b): # Принимаем параметры a и b
print(a + b) # Выводим их сложение
array = [1, 2] # Создаём массив из двух чисел
test(*array) # Вывод: 3
При записи
*array
значения для функции были преобразованы в test(1, 2)
**kwargs
:def test(a,b): # Принимаем параметры a и b
print(a + b) # Выводим их сложение
dct = {'a':1, 'b':2} # Создаём словарь и записываем ключ-значение
test(**dct) # Вывод: 3
При записи
**dct
значения для функции были преобразованы в test(a=1, b=2)
def test1(*var): # Принимаем параметры в виде множества
print(var)
test1(1, 2, 3) # Вывод: (1, 2, 3)
def test2(**var): # Принимаем параметры в виде словаря
print(var)
test2(a=1, b=2) # Вывод: {'a': 1, 'b': 2}
Такие вот дела
@pythonl
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM