Python/ django
по всем вопросам @workakkk @itchannels_telegram - 🔥 все ит каналы @ai_machinelearning_big_data -ML @ArtificialIntelligencedl -AI @datascienceiot - 📚 @pythonlbooks РКН: clck.ru/3FmxmM
Mostrar más📈 Análisis del canal de Telegram Python/ django
El canal Python/ django (@pythonl) en el segmento lingüístico de Ruso es un actor destacado. Actualmente la comunidad reúne a 58 396 suscriptores, ocupando la posición 2 244 en la categoría Tecnologías y Aplicaciones y el puesto 10 292 en la región Rusia.
📊 Métricas de audiencia y dinámica
Desde su creación el невідомо, el proyecto ha mostrado un crecimiento acelerado, reuniendo a 58 396 suscriptores.
Según los últimos datos del 03 noviembre, 2026, el canal mantiene una actividad estable. En los últimos 30 días la variación de miembros fue de -242, y en las últimas 24 horas de -32, conservando un alto alcance.
- Estado de verificación: No verificado
- Tasa de interacción (ER): El promedio de interacción de la audiencia es 6.00%. Durante las primeras 24 horas tras publicar, el contenido suele obtener 3.06% de reacciones respecto al total de suscriptores.
- Alcance de las publicaciones: Cada publicación recibe en promedio 3 501 visualizaciones. En el primer día suele acumular 1 784 visualizaciones.
- Reacciones e interacción: La audiencia responde de forma activa: el promedio de reacciones por publicación es 18.
- Intereses temáticos: El contenido se centra en temas clave como github, claude, контекст, архитектура, api.
📝 Descripción y política de contenido
El autor describe el recurso como un espacio para expresar opiniones subjetivas:
“по всем вопросам @workakkk
@itchannels_telegram - 🔥 все ит каналы
@ai_machinelearning_big_data -ML
@ArtificialIntelligencedl -AI
@datascienceiot - 📚
@pythonlbooks
РКН: clck.ru/3Fm...”
Gracias a la alta frecuencia de actualizaciones (últimos datos recibidos el 04 noviembre, 2026), el canal mantiene la vigencia y un amplio alcance. La analítica demuestra que la audiencia interactúa activamente con el contenido, lo que lo convierte en un punto de referencia dentro de la categoría Tecnologías y Aplicaciones.
cursor.execute("SELECT * FROM my_table WHERE id = ?", [123])
# parameter placeholder ------------------------> ^
# список/кортеж со значениями параметров -----------> ^^^^^
⏩Какие преимущества приносит использование параметров?
— Защита от SQL-инъекций
— Правильное квотирование литералов в зависимости от их типа (пример со строками, пример с датами).
— Оптимизация — сокращение времени работы SQL запроса. Благодаря использованию параметров следующие шаги не выполняются при повторном запуске (зависит от БД):
— проверка синтаксиса SQL запроса
— проверка прав доступа к объектам БД
— построение плана выполнения SQL запроса
— Защита от переполнения/вытеснения кеша SQL запросов. Например "безобидный" запрос qry = f"SELECT first_name, last_name FROM users WHERE id = {user_id}", который часто выполняется в нагруженной системе с различными значениями user_id может вытеснить из кеша запросов полезные запросы.
⏩ Пример использования параметров в SQL запросе:
import sqlite3
con = sqlite3.connect(":memory:")
cur = con.cursor()
cur.execute("create table lang (name, first_appeared)")
cur.execute("insert into lang values (?, ?)", ("C", 1972))
lang_list = [
("Fortran", 1957),
("Python", 1991),
("Go", 2009),
]
cur.executemany("insert into lang values (?, ?)", lang_list)
cur.execute("select * from lang where first_appeared=:year", {"year": 1972})
print(cur.fetchall())
con.close()
При таком подходе можно использовать cursor.executemany() - это значительно быстрее и эффективнее по сравнению с вставкой в цикле по одной строке.
📎 Читать подробнее
@pythonlPython для создания полнофункциональных веб-приложений.
Он позволяет легко создавать пользовательские интерфейсы, используя модели Pydantic, которые аналогичны свойствам компонентов React.
Эта интеграция позволяет быстро разрабатывать интерактивные и красивые пользовательские интерфейсы с использованием Python.
▪ Github
@pythonldef divide(x=1, y=0):
try:
return x / y
except ZeroDivisionError:
raise ValueError("Pattern 3 error.") from None
divide()
Здесь при вызове функции divide() она вызывается с параметрами по умолчанию, то есть x=1, y=0, в общем происходит деление на 0, и мы попадаем в ветку except ZeroDivisionError.
Если бы мы не написали from None, в поднявшемся исключении встречалась бы ошибка ZeroDivisionError.
В данном случае трассировка не будет включать исходную ошибку ZeroDivisionError, а только исключение ValueError и сообщение об ошибке — всё из-за from None.
⏩В общем, используйте from None, когда вы хотите скрыть от пользователя детали исходного исключения или внутреннее исключение используемой библиотеки.
Вот такие дела
@pythonlarray вместо list?
⏩Если в двух словах, то для хранения элементов разных типов, предпочтительнее использовать list, а для быстрых операций с числовыми данными и эффективного расходования памяти – array из модуля array.
⏩Список в Python – это универсальный инструмент, способный хранить элементы разных типов и эффективно управлять памятью, что особенно ценно при изменении размера списка.
Используйте списки, когда:
— Вам необходимо хранить элементы разного типа.
— Предполагается изменение объема данных.
— Важны удобство и простота поддержки кода.
⏩Массивы: когда приветствуется оптимизация при работе с числами
Массивы предназначены для высокопроизводительной работы с большими массивами однородных данных, особенно числовых.
Выбирайте массивы, когда:
— Вы работаете исключительно с числами одного типа.
— Обрабатываете большие объемы данных и важна экономия памяти.
— Нужна тесная интеграция с C-кодом.
@pythonlgen = (num for num in range(10))
print(*gen)
🔜Всё проще, чем кажется.
*args и **kwargs — это способы передачи переменного количества аргументов в функцию. Другими словами, они "распаковывают" значения из массива/словаря/множества и т.п. и передают эти значения в функцию.
🔜Пример использования *args:
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}
Такие вот дела 🖥
@pythonlpip install python-decouple opencv-python pyzbar IMAPClient
decouple — для чтения данных из файла
opencv — для чтения изображения с QR-кодом
pyzbar — чтобы прочитать данные, закодированные в QR-коде
IMAPClient — с помощью неё будем работать с сообщениями на почтовом сервере
Так как мы будем использовать пароль приложений, а также логин от аккаунта Google, то в коде его желательно не использовать. Поэтому, необходимо создать файл «.env» с примерным содержимым:
login = "test@gmail.com" pwd = "gffg sbbp jccj vhhi"2 шаг — импорт библиотек 3 шаг — считывание данных из QR-кода 4 шаг — отправка письма 5 шаг — чтение почты ▶️ Полностью о каждом шаге можно прочитать тут @pythonl
`__init_subclass__`.
Он запускается, когда ваш класс становится подклассом. 🚀
@pythonlEnum, хранящий простые значения, и маппинг:
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 на изображении.
Кажется, что выглядит неплохо, но в таком варианте есть ограничение по количеству дополнительных параметров. Давайте попробуем еще немного улучшить.
▶️Вариант 2
Раз в 1 варианте у нас получилось сделать с использованием tuple, то значит получится и с typing.NamedTuple. К тому же будут именованные параметры, что повысит читабельность.
В качестве члена перечисления будем хранить целиком объект typing.NamedTuple. Теперь чтобы у нас происходило корректное сравнение объектов нам нужно переопределить методы __hash__ и __eq__. Сравниваться объекты будут по одному полю — value.
Получился в принципе рабочий вариант. Конечно у него есть свои ограничения, плюс решение не универсальное.
▶️Вариант 3
Что если вместо typing.NamedTuple использовать dataclass? Вроде идея здравая. Появляется возможность наследования классов, хранящих доп. параметры. Плюс вспомогательные функции из dataclasses.
В качестве члена перечисления, как и в прошлый раз, будем хранить объект целиком, только теперь это dataclass.
Ну вот, теперь другое дело)
➡️ Полезная статья в тему
@pythonlInstructor 🔥
⭐️Работает на API вызова функций OpenAI, разработанном для простоты и прозрачности
Метод instructor.patch() для класса OpenAI вводит несколько ключевых полезных вещей:
🟡Режим ответа: Укажите модель Pydantic, чтобы упростить извлечение выходных данных.
🟡Максимальное количество повторных попыток: Установите желаемое количество повторных попыток для запросов.
🟡Контекст валидации: Предоставьте объект контекста для расширенного доступа к валидатору.
🟡Используйте метод client.chat.completions.create для отправки запроса и извлечения данных в объект Pydantic. Параметр response_model указывает модель Pydantic, которую следует использовать для извлечения. Полезно аннотировать переменную типом модели ответа, что поможет вашей IDE обеспечить автозаполнение и проверку орфографии.
https://pypi.org/project/instructor/
@pythonl