QAnything (Question and Answer based on Anything) - это локальная система ответов на вопросы из базы знаний, разработанная для поддержки широкого спектра форматов файлов и баз данных, позволяющая устанавливать и использовать ее в автономном режиме.
С помощью
QAnything
вы можете просто бросить любой локально хранящийся файл любого формата и получить точные, быстрые и надежные ответы.▪Github
▪Docs
@pythonl
Please open Telegram to view this post
VIEW IN TELEGRAM
Встречайте — 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