Python/ django
по всем вопросам @workakkk @itchannels_telegram - 🔥 все ит каналы @ai_machinelearning_big_data -ML @ArtificialIntelligencedl -AI @datascienceiot - 📚 @pythonlbooks РКН: clck.ru/3FmxmM
Ko'proq ko'rsatish📈 Telegram kanali Python/ django analitikasi
Python/ django (@pythonl) Rus til segmentidagi kanali faol ishtirokchi. Hozirda hamjamiyat 58 972 obunachidan iborat bo'lib, Texnologiyalar & Aralashmalar toifasida 2 162-o'rinni va Rossiya mintaqasida 10 185-o'rinni egallagan.
📊 Auditoriya ko‘rsatkichlari va dinamika
невідомо sanasidan buyon loyiha tez o‘sib, 58 972 obunachiga ega bo‘ldi.
29 Avgust, 2026 dagi oxirgi ma’lumotlarga ko‘ra kanal barqaror faollikka ega. Oxirgi 30 kunda obunachilar soni -292 ga, so‘nggi 24 soatda esa -1 ga o‘zgardi va umumiy qamrov yuqori darajada qolmoqda.
- Tasdiqlash holati: Tasdiqlanmagan
- Jalb etish (ER): Auditoriya o‘rtacha 6.27% darajada jalb etiladi. Nashrdan keyingi dastlabki 24 soatda kontent odatda umumiy obunachilar sonining 3.33% ini tashkil etuvchi reaksiyalarni to‘playdi.
- Post qamrovi: Har bir post o‘rtacha 3 696 marta ko‘riladi; birinchi sutkada odatda 1 963 ta ko‘rish yig‘iladi.
- Reaksiyalar va o‘zaro ta’sir: Auditoriya faol: har bir postga o‘rtacha 20 ta reaksiya keladi.
- Tematik yo‘nalishlar: Kontent github, claude, контекст, архитектура, api kabi asosiy mavzularga jamlangan.
📝 Tavsif va kontent siyosati
Muallif resursni shaxsiy fikrni ifoda etish maydoni sifatida ta’riflaydi:
“по всем вопросам @workakkk
@itchannels_telegram - 🔥 все ит каналы
@ai_machinelearning_big_data -ML
@ArtificialIntelligencedl -AI
@datascienceiot - 📚
@pythonlbooks
РКН: clck.ru/3Fm...”
Yuqori yangilanish chastotasi (oxirgi ma’lumot 30 Avgust, 2026 da olingan) sababli kanal doimo dolzarb va katta qamrovli bo‘lib qoladi. Analitika auditoriya kontent bilan faol hamkorlik qilishini, uni Texnologiyalar & Aralashmalar toifasidagi muhim ta’sir nuqtasiga aylantirishini ko‘rsatadi.
sum(), sorted(), Counter. Все числа в списке представлены как строки.
Пример:
import random
original = [str(i) for i in range(1, 101)]
missing = random.choice(original)
shuffled = original.copy()
shuffled.remove(missing)
random.shuffle(shuffled)
Напиши функцию:
def find_missing_number(data: list[str]) -> int:
...
📌 Подвох:
Нельзя просто сложить строки. Но можно использовать свойство XOR:
a ^ a = 0 0 ^ b = bТо есть: если мы сделаем XOR всех чисел от 1 до 100, а затем XOR всех чисел в переданном списке — результатом будет пропущенное число. 🧠 Решение: ```python def find_missing_number(data: list[str]) -> int: xor_full = 0 xor_data = 0 for i in range(1, 101): xor_full ^= i for val in data: xor_data ^= int(val) return xor_full ^ xor_data ``` ✅ Пояснение: -
xor_full — XOR всех чисел от 1 до 100.
- xor_data — XOR всех чисел в текущем списке (`str` → `int`).
- Разность xor_full ^ xor_data вернёт единственное отсутствующее число.
🎯 Пример использования:
```python
original = [str(i) for i in range(1, 101)]
original.remove("42")
random.shuffle(original)
print(find_missing_number(original)) # → 42
```
🔥 Эта задача хороша тем, что:
• содержит хитрый запрет на sum()
• требует знания побитовых операций
• работает с типами (`str` vs `int`)
• подходит для собеседования уровня middle+
@pythonl
sudo apt install ffmpeg
pip install TTS soundfile torchaudio gradio
git clone https://github.com/coqui-ai/TTS.git
cd TTS
pip install -e .
🎙️ 1. Подготовка записи голоса
Тебе нужен файл .wav:
- продолжительность: от 1 минуты
- формат: моно, 16 кГц, 16-bit
Пример конвертации:
ffmpeg -i input.mp3 -ac 1 -ar 16000 output.wav
🧬 2. Генерация эмбеддинга твоего голоса
from TTS.tts.configs.xtts_config import XttsConfig
from TTS.tts.models.xtts import Xtts
config = XttsConfig()
model = Xtts.init_from_config(config)
model.load_checkpoint("tts_models/multilingual/multi-dataset/xtts_v2")
voice_sample = "your_voice.wav"
speaker_embedding = model.get_speaker_embedding(voice_sample)
📤 3. Генерация речи с твоим голосом
text = "Привет! Я теперь могу говорить твоим голосом."
wav = model.tts(text, speaker_embedding=speaker_embedding)
model.save_wav(wav, "output.wav")
💻 4. (Опционально) Интерфейс с Gradio
import gradio as gr
def speak(text):
wav = model.tts(text, speaker_embedding=speaker_embedding)
path = "generated.wav"
model.save_wav(wav, path)
return path
gr.Interface(fn=speak, inputs=gr.Textbox(), outputs=gr.Audio()).launch()
✅ Быстрый способ (через CLI)
tts --model_name "tts_models/multilingual/multi-dataset/xtts_v2" \
--text "Привет, мир!" \
--speaker_wav path/to/your.wav \
--out_path output.wav
⚠️ Важно
- 💻 Работает на CPU, но лучше с GPU.
- 🌐 Поддерживает русский язык.
@pythonlcall_limiter, который:
- ограничивает функцию f максимум до n вызовов
- после n вызова функция больше не вызывается, а возвращает строку "LIMIT REACHED"
Пример использования:
@call_limiter(3)
def greet(name):
return f"Hello, {name}!"
print(greet("Alice")) # Hello, Alice!
print(greet("Bob")) # Hello, Bob!
print(greet("Charlie"))# Hello, Charlie!
print(greet("Dave")) # LIMIT REACHED
🎯 Подвохи:
- Нужно создать декоратор-фабрику с аргументом n
- Внутри должна быть функция с nonlocal, чтобы отслеживать число вызовов
- Часто путаются и используют mutable default, что ломает независимость между декорируемыми функциями
✅ Решение:
```python
def call_limiter(n):
def decorator(func):
count = 0
def wrapper(*args, **kwargs):
nonlocal count
if count >= n:
return "LIMIT REACHED"
count += 1
return func(*args, **kwargs)
return wrapper
return decorator
```
🧪 **Проверка:**
```python
@call_limiter(2)
def ping():
return "pong"
print(ping()) # pong
print(ping()) # pong
print(ping()) # LIMIT REACHED
@call_limiter(1)
def echo(msg):
return msg
print(echo("hi")) # hi
print(echo("bye")) # LIMIT REACHED
```
🧠 **Что проверяет задача:**
• Понимание функций высшего порядка
• Работа с `nonlocal` и областью видимости
• Контроль состояния внутри декоратора
• Умение не "засорить" глобальные или общие области
@pythonl
1. Установите `Docker` и `docker-compose`
2. Клонируйте репозиторий:
```bash
git clone https://github.com/aaPanel/BillionMail.git
cd BillionMail
Запустите:
docker-compose up -d
🔗 Репозиторий
import re
🔍 Основные функции модуля re
re.search(pattern, string) # Ищет первое совпадение (где угодно в строке)
re.match(pattern, string) # Ищет совпадение только в начале строки
re.fullmatch(pattern, string) # Проверяет, соответствует ли вся строка шаблону
re.findall(pattern, string) # Возвращает все совпадения в виде списка
re.finditer(pattern, string) # То же, но как итератор Match-объектов
re.sub(pattern, repl, string) # Замена по шаблону
re.split(pattern, string) # Разбиение строки по шаблону
# 🧠 Основы синтаксиса шаблонов
| Шаблон | Что значит |
|---------|-------------------------------------|
| . | Любой символ, кроме \n |
| ^ | Начало строки |
| $ | Конец строки |
| * | 0 или больше повторений |
| + | 1 или больше |
| ? | 0 или 1 повторение |
| {n} | ровно n раз |
| {n,} | n или больше |
| {n,m} | от n до m |
| [] | Символьный класс |
| [^] | Отрицание символьного класса |
| | | Или (`a|b`) |
| () | Группа (захват) |
| \ | Экранирование спецсимвола |
💡 Примеры
re.search(r'\d+', 'ID=12345') # Найдёт '12345' (одно или больше цифр)
re.match(r'^\w+$', 'hello_world') # Вся строка — только буквы/цифры/_
re.findall(r'[A-Z][a-z]+', 'Mr. Smith and Dr. Brown') # ['Smith', 'Brown']
re.sub(r'\s+', '-', 'a b c') # 'a-b-c'
re.split(r'[;,\s]\s*', 'one, two;three four') # ['one', 'two', 'three', 'four']
🎯 Захват групп
text = 'Name: John, Age: 30'
match = re.search(r'Name: (\w+), Age: (\d+)', text)
if match:
print(match.group(1)) # John
print(match.group(2)) # 30
Группы можно называть:
pattern = r'(?P<name>\w+): (?P<value>\d+)'
match = re.search(pattern, 'score: 42')
match.group('name') # 'score'
match.group('value') # '42'
🧱 Комбинированные шаблоны
pattern = r'\b(?:https?://)?(www\.)?\w+\.\w+\b'
text = 'Visit https://example.com or www.test.org'
re.findall(pattern, text) # [['www.'], ['www.']]
⚠️ Полезные советы
• Всегда используйте r'' перед шаблоном, чтобы не экранировать \
• re.compile(pattern) ускоряет повторное использование
• Старайтесь избегать re.match — чаще нужен re.search
✅ Быстрая проверка шаблонов
📍 Онлайн-проверка:
[regex101.com](https://regex101.com/)
[pythex.org](https://pythex.org/)
Хочешь отдельную шпаргалку по re.sub с лямбдами, заменами и функциями внутри, ставь лайк 👍
@pythonl
def memoize(fn):
cache = {}
def wrapper(arg):
if arg in cache:
print("Из кэша")
return cache[arg]
else:
result = fn(arg)
cache[arg] = result
return result
return wrapper
@memoize
def add_to_list(val, lst=[]):
lst.append(val)
return lst
res1 = add_to_list(1)
res2 = add_to_list(2)
res3 = add_to_list(1)
print(res1)
print(res2)
print(res3)
❓ Вопрос:
Что будет выведено? Где здесь двойной подвох?
🔍 Разбор:
На первый взгляд кажется, что:
1. add_to_list(1) вернёт [1]
2. add_to_list(2) вернёт [2]
3. add_to_list(1) снова вызовет функцию (или достанет из кэша)
Но тут два подвоха:
Подвох №1: изменяемый аргумент по умолчанию
Аргумент lst=[] создаётся один раз при определении функции. Все вызовы без передачи списка будут использовать один и тот же список.
Подвох №2: кэширование по ключу
Декоратор memoize кэширует результат по ключу arg. Но функция возвращает список, который изменяется при каждом вызове. Даже если кэш сработает, вы получите тот же объект списка, который менялся между вызовами!
🧮 Что реально произойдёт:
- `res1 = add_to_list(1)` → функция вызвана, список становится `[1]`
- `res2 = add_to_list(2)` → функция вызвана снова (новый аргумент), список становится `[1, 2]`
- `res3 = add_to_list(1)` → аргумент `1` есть в кэше, сработает ветка `print("Из кэша")` и вернётся **ссылку на тот же изменённый список**
🔢 **Вывод:**
```
[1, 2]
[1, 2]
Из кэша
[1, 2]
```
Все результаты указывают на один и тот же изменённый список.
💥 **Почему это важно:**
1️⃣ **Изменяемые аргументы по умолчанию** сохраняются между вызовами
2️⃣ **Кэширование мутабельных объектов** может привести к неожиданным результатам: при возврате списка вы возвращаете не "результат на момент вычисления", а ссылку на объект, который может измениться позже
🛡️ **Как исправить:**
1️⃣ Использовать `lst=None` и инициализировать внутри функции:
```python
def add_to_list(val, lst=None):
if lst is None:
lst = []
lst.append(val)
return lst
```
2️⃣ Если кэшировать мутабельные объекты, лучше возвращать **копию**:
```python
import copy
cache[arg] = copy.deepcopy(result)
```
✅ **Вывод:**
Декораторы + мутабельные аргументы = ловушка даже для опытных разработчиков. Особенно, когда мутабельные объекты кэшируются и меняются за кулисами.
@pythonl