Python/ django
по всем вопросам @workakkk @itchannels_telegram - 🔥 все ит каналы @ai_machinelearning_big_data -ML @ArtificialIntelligencedl -AI @datascienceiot - 📚 @pythonlbooks РКН: clck.ru/3FmxmM
نمایش بیشتر📈 تحلیل کانال تلگرام Python/ django
کانال Python/ django (@pythonl) در بخش زبانی روسی بازیگری فعال است. در حال حاضر جامعه شامل 58 972 مشترک است و جایگاه 2 162 را در دسته فناوری و برنامهها و رتبه 10 185 را در منطقه روسيا دارد.
📊 شاخصهای مخاطب و پویایی
از زمان ایجاد در невідомо، پروژه رشد سریعی داشته و 58 972 مشترک جذب کرده است.
بر اساس آخرین دادهها در تاریخ 29 اوت, 2026، کانال فعالیت پایداری دارد. در ۳۰ روز گذشته تغییر اعضا برابر -292 و در ۲۴ ساعت گذشته برابر -1 بوده و همچنان دسترسی گستردهای حفظ شده است.
- وضعیت تأیید: تأیید نشده
- نرخ تعامل (ER): میانگین تعامل مخاطب 6.27% است و در ۲۴ ساعت نخست پس از انتشار، محتوا معمولاً 3.33% واکنش نسبت به کل مشترکان کسب میکند.
- دسترسی پستها: هر پست به طور میانگین 3 696 بازدید دریافت میکند. در اولین روز معمولاً 1 963 بازدید جمعآوری میشود.
- واکنشها و تعامل: مخاطبان بهطور فعال حمایت میکنند؛ میانگین واکنش به هر پست 20 است.
- علایق موضوعی: محتوا بر موضوعات کلیدی مانند github, claude, контекст, архитектура, api تمرکز دارد.
📝 توضیح و سیاست محتوایی
نویسنده این فضا را محل بیان دیدگاههای شخصی توصیف میکند:
“по всем вопросам @workakkk
@itchannels_telegram - 🔥 все ит каналы
@ai_machinelearning_big_data -ML
@ArtificialIntelligencedl -AI
@datascienceiot - 📚
@pythonlbooks
РКН: clck.ru/3Fm...”
به لطف بهروزرسانیهای پرتکرار (آخرین داده در تاریخ 30 اوت, 2026)، کانال همواره بهروز و دارای دسترسی بالاست. تحلیلها نشان میدهد مخاطبان بهطور فعال با محتوا تعامل دارند و آن را به نقطه اثرگذاری مهم در دسته فناوری و برنامهها تبدیل کردهاند.
alt.sources; уже есть классы, исключения и базовые коллекции.
1994-01-26 — Выходит Python 1.0.0: добавлены lambda, map, filter, reduce.
1994-02 — Создана группа новостей comp.lang.python, вокруг которой формируется сообщество.
2000-10-16 — Python 2.0: list-comprehensions, сборщик циклического мусора, первая реализация Unicode.
2003-07-29 — Python 2.3: внедрён сортировщик Timsort.
2008-12-03 — Python 3.0 («Py3k»): переход на новый str`/`bytes, print() как функция, разделённый range.
2010-07-03 — Python 2.7: «долгожитель», поддержка продлена до 2020-01-01.
2015-09-13 — Python 3.5: появляется синтаксис async / await.
2018-07-12 — Гвидо объявляет о выходе с поста BDFL после споров вокруг оператора «морж» :=.
2019-10-14 — Python 3.8: тот самый оператор :=, позиционные-только аргументы / и улучшенный typing.
2020-01-01 — Официальный End-of-Life ветки 2.x.
2021-10-04 — Python 3.10: структурное сопоставление match/case.
2023-10-02 — Python 3.12: заметное ускорение интерпретатора (до +25 %), префиксные f-строки.
2024-10-07 — Python 3.13.0: экспериментальная сборка Free-Threaded CPython без GIL (PEP 703).
2025-04-08 — Python 3.13.3 (текущая стабильная версия).
2025-10 (ожидается) — Python 3.14: дальнейшая стабилизация «без-GIL»-сборки, новый `buffer`-API.
---
### Интересные факты
- Название появилось благодаря юмористическому шоу *Monty Python’s Flying Circus*; отсюда мемы «spam / eggs».
- Команда import this выводит Zen of Python — 19 однострочных принципов языка (PEP 20).
- Пасхалка import antigravity открывает комикс xkcd #353; from __future__ import braces выдаёт SyntaxError: not a chance.
- Timsort, написанный для Python 2.3, позже стал дефолтным алгоритмом сортировки в Java 7, Android, Swift и Rust.
- PEP 703 позволяет собирать CPython без GIL, открывая путь к настоящему многопоточному Python без радикального «Python 4».
- В апреле 2025 Python обновил рекорд индекса TIOBE, превысив 25 % и почти втрое обогнав C++.
- Гвидо носил титул BDFL (Benevolent Dictator For Life) почти 30 лет; c 2023 г. он возвращён как *BDFL-Emeritus*.
- PyPI (Python Package Index) превысил 500 000 пакетов, а pip install скачивается около 40 млрд раз в месяц (апрель 2025).
- import __hello__ просто печатает *Hello world!* — напоминание, что «явное лучше неявного».
> Итог: за три с лишним десятилетия Python превратился из рождественского хобби-проекта в язык № 1, оставаясь при этом дружелюбным, читаемым и немного шутливым.
https://www.youtube.com/shorts/ZDMz1foKKlM?feature=share
@pythonl
from Crypto.Cipher import DES
from Crypto.Util.Padding import pad, unpad
# Ключ должен быть ровно 8 байт
key = b'8bytekey'
cipher = DES.new(key, DES.MODE_ECB)
data = b'HelloWorld123' # Длина должна быть кратной 8, иначе нужно дополнить
padded_data = pad(data, 😍
encrypted = cipher.encrypt(padded_data)
print("Зашифрованные данные:", encrypted)
# Дешифрование
decrypted = unpad(cipher.decrypt(encrypted), 😍
print("Расшифрованные данные:", decrypted)
✅ Важно:
Ключ должен быть ровно 8 байт (DES = 64-битный ключ, но 8 бит используются для контроля чётности).
Данные должны быть кратны 8 байтам, поэтому часто используется padding (дополнение пустыми байтами).
⚠️ Почему DES больше не рекомендуют?
Маленький размер ключа → легко перебрать с помощью современных вычислительных мощностей.
Уязвим к атакам (например, differential cryptanalysis).
Сегодня вместо DES чаще используют AES (Advanced Encryption Standard), который безопаснее и быстрее.
✍️ Вывод
Шифрование — важнейший инструмент защиты данных. DES — классический пример симметричного шифрования, но сегодня он больше используется в учебных целях или для совместимости с устаревшими системами. Если нужна настоящая защита, выбирайте современные алгоритмы, такие как AES.
def extend_list(val, lst=[]):
lst.append(val)
return lst
# Первый вызов: используем список по умолчанию
list1 = extend_list(10)
# Второй вызов: передаём новый пустой список
list2 = extend_list(123, [])
# Третий вызов: снова используем список по умолчанию
list3 = extend_list('a')
print('list1 =', list1)
print('list2 =', list2)
print('list3 =', list3)
🧩 Решение
Механика дефолтного списка
В сигнатуре функции lst=[] создаётся один список при определении функции и затем переиспользуется во всех вызовах, где lst не передан.
Первый вызов
```python
list1 = extend_list(10)
lst не передан → берётся дефолтный список.
Добавляем 10.
⇒ list1 становится [10].
```p
Второй вызов
```python
list2 = extend_list(123, [])```
Передаём новый пустой список [].
В него добавляется 123.
⇒ list2 становится [123].
Третий вызов
```python
list3 = extend_list('a')```
Опять не передан lst → используется тот же дефолтный список, куда уже был добавлен 10.
Добавляем 'a'.
⇒ дефолтный список становится [10, 'a'], и list3 тоже ссылается на [10, 'a'].
Итоговый вывод программы:
```python
list1 = [10, 'a']
list2 = [123]
list3 = [10, 'a']```
Обратите внимание, что list1 и list3 — это один и тот же дефолтный список, поэтому изменения сохраняются между вызовами.
@pythonlfrom TUIFIManager import *
Установка
sudo pip3 install tuifimanager --upgrade
pip3 install TUIFIManager --upgrade
https://github.com/GiorgosXou/TUIFIManager
@pythonl@thread_safe_cached, который:
- Кэширует результат вызова функции по её аргументам (аналог functools.lru_cache, но свой).
- Если несколько потоков одновременно вызывают функцию с одинаковыми аргументами:
- Только один поток реально выполняет функцию,
- Остальные ждут, пока результат будет вычислен, и получают готовый результат.
- Кэш никогда не удаляется (неограниченный размер).
Ограничения:
- Решение должно работать для произвольных функций и аргументов (hashable).
- Нельзя использовать готовый functools.lru_cache или другие библиотеки кэширования.
- Нужно обеспечить корректную работу в многопоточной среде без гонок данных.
---
▪️ Подсказки:
- Для кэширования подойдёт dict с ключами по аргументам (`*args`, `**kwargs`).
- Для защиты доступа к кэшу понадобится threading.Lock.
- Для ожидания завершения вычисления другими потоками можно использовать threading.Event.
- Продумайте carefully: как отличить "результат уже посчитан" от "результат в процессе вычисления".
---
▪️ Что оценивается:
- Умение работать с многопоточностью в Python.
- Правильная организация кэширования.
- Чистота и лаконичность кода.
- Умение обрабатывать тонкие случаи, например: одновременные вызовы.
---
▪️ Разбор возможного решения:
Основная идея:
- Создать кэш cache: Dict[Key, Result].
- Одновременно создать словарь "ожиданий" in_progress: Dict[Key, threading.Event].
- Если кто-то начал считать значение:
- Остальные ждут Event, пока оно не будет установлено.
Пример реализации:
import threading
import functools
def thread_safe_cached(func):
cache = {}
in_progress = {}
lock = threading.Lock()
@functools.wraps(func)
def wrapper(*args, **kwargs):
key = (args, frozenset(kwargs.items()))
with lock:
if key in cache:
return cache[key]
if key not in in_progress:
in_progress[key] = threading.Event()
in_progress[key].clear()
creator = True
else:
creator = False
if creator:
try:
result = func(*args, **kwargs)
with lock:
cache[key] = result
finally:
in_progress[key].set()
with lock:
del in_progress[key]
return result
else:
in_progress[key].wait()
with lock:
return cache[key]
return wrapper
---
▪️ Пояснения к коду:
- При первом вызове для новых аргументов поток создаёт Event и начинает считать результат.
- Остальные потоки видят Event и вызывают wait(), пока первый поток не установит set().
- Как только результат посчитан, Event сигнализирует всем ждущим потокам, что данные готовы.
- Доступ к cache и in_progress защищён через lock для избежания гонок.
---
▪️ Возможные подводные камни:
- ❗ Если не удалять Event из in_progress, кэш постепенно раздуется мусором.
- ❗ Если ошибка случится внутри func, необходимо всё равно освободить Event, иначе потоки будут вечно ждать.
- ❗ Нельзя держать lock во время выполнения тяжёлой функции func, иначе все потоки будут блокироваться.
---
▪️ Вопросы на собеседовании по этой задаче:
- Как изменить реализацию, чтобы кэш имел ограничение по размеру (например, максимум 1000 элементов)?
- Как адаптировать декоратор под асинхронные функции (`async def`)?
- Что будет, если func иногда бросает исключения? Как кэшировать ошибки или не кэшировать их?
- Как изменить реализацию так, чтобы кэш удалял устаревшие данные через TTL (Time-To-Live)?
---
@pythonlpip install pdf-craft и pip install onnxruntime==1.21.0 (или onnxruntime-gpu==1.21.0 для CUDA).
Для EPUB-конвейера нужен доступ к LLM-сервису (например, DeepSeek).
🟡 Github
@pythonl