Zen of Python
Полный Дзен Пайтона в одном канале Разместить рекламу: @tproger_sales_bot Правила общения: https://tprg.ru/rules Другие каналы: @tproger_channels Сайт: https://tprg.ru/site Регистрация в перечне РКН: https://tprg.ru/xZOL
Ko'proq ko'rsatish📈 Telegram kanali Zen of Python analitikasi
Zen of Python (@zen_of_python) Rus til segmentidagi kanali faol ishtirokchi. Hozirda hamjamiyat 18 957 obunachidan iborat bo'lib, Texnologiyalar & Aralashmalar toifasida 6 786-o'rinni va Rossiya mintaqasida 34 781-o'rinni egallagan.
📊 Auditoriya ko‘rsatkichlari va dinamika
невідомо sanasidan buyon loyiha tez o‘sib, 18 957 obunachiga ega bo‘ldi.
27 Avgust, 2026 dagi oxirgi ma’lumotlarga ko‘ra kanal barqaror faollikka ega. Oxirgi 30 kunda obunachilar soni -157 ga, so‘nggi 24 soatda esa 7 ga o‘zgardi va umumiy qamrov yuqori darajada qolmoqda.
- Tasdiqlash holati: Tasdiqlanmagan
- Jalb etish (ER): Auditoriya o‘rtacha 12.56% darajada jalb etiladi. Nashrdan keyingi dastlabki 24 soatda kontent odatda umumiy obunachilar sonining 6.30% ini tashkil etuvchi reaksiyalarni to‘playdi.
- Post qamrovi: Har bir post o‘rtacha 2 381 marta ko‘riladi; birinchi sutkada odatda 1 195 ta ko‘rish yig‘iladi.
- Reaksiyalar va o‘zaro ta’sir: Auditoriya faol: har bir postga o‘rtacha 5 ta reaksiya keladi.
- Tematik yo‘nalishlar: Kontent github, rust, pip, api, install kabi asosiy mavzularga jamlangan.
📝 Tavsif va kontent siyosati
Muallif resursni shaxsiy fikrni ifoda etish maydoni sifatida ta’riflaydi:
“Полный Дзен Пайтона в одном канале
Разместить рекламу: @tproger_sales_bot
Правила общения: https://tprg.ru/rules
Другие каналы: @tproger_channels
Сайт: https://tprg.ru/site
Регистрация в перечне РКН: https://tprg.ru/xZOL”
Yuqori yangilanish chastotasi (oxirgi ma’lumot 28 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.
python -m pip install requests
Рекомендуется устанавливать внешние пакеты в виртуальное окружение, чтобы избежать конфликтов зависимостей.
Основные методы
Для получения данных с сервера используется метод GET:
import requests
response = requests.get('https://example.com')
print(response.text)
Для отправки данных на сервер используется метод POST:
import requests
data = {'key': 'value'}
response = requests.post('https://example.com', data=data)
print(response.text)
Ответы сервера
Статус-код запроса можно получить так:
print(response.status_code) # 200 — успешный запрос
Если ответ содержит JSON-данные, их можно преобразовать в Python-объект с помощью метода json():
data = response.json()
Параметры запроса (params)
Параметры запроса можно передавать в виде словаря в params:
params = {'q': 'python'}
response = requests.get('https://example.com/search', params=params)
Requests автоматически кодирует параметры и добавляет их к URL.
Заголовки (Headers)
Заголовки запроса можно передавать в виде словаря в параметре headers:
headers = {'User-Agent': 'my-app'}
response = requests.get('https://example.com', headers=headers)
Это полезно для указания типа контента, авторизации и других параметров.
Другие HTTP-методы
Requests поддерживает все основные HTTP-методы:
🔘requests.put() — для обновления;
🔘requests.delete() — для удаления.
🔘requests.head() — для получения только заголовков ответа;
🔘requests.options() — для получения поддерживаемых сервером методов.
Подготовка запроса
Requests позволяет подготовить запрос:
from requests import Request, Session
req = Request('GET', 'https://example.com', params={'q': 'python'})
prepared = req.prepare()
with Session() as session:
response = session.send(prepared)
print(response.text)
Это полезно, если необходимо многократно отправлять одинаковые запросы с разными параметрами.
Аутентификация
Requests поддерживает базовую аутентификацию с помощью параметра auth:
from requests.auth import HTTPBasicAuth
response = requests.get('https://example.com', auth=HTTPBasicAuth('user', 'pass'))
Также поддерживаются другие методы аутентификации, такие как OAuth.
Безопасность
Requests по умолчанию проверяет SSL-сертификаты при работе с HTTPS. Если необходимо отключить проверку (не рекомендуется в производственной среде), можно использовать параметр verify:
response = requests.get('https://example.com', verify=False)
Повторные попытки и сессии
Для улучшения производительности и управления соединениями рекомендуется использовать сессии:
with requests.Session() as session:
response = session.get('https://example.com')
print(response.text)
Сессии позволяют повторно использовать соединения и сохранять параметры между запросами. Для автоматических повторных попыток в случае неудачи можно использовать библиотеку urllib3 вместе с Requests.
#основы
@zen_of_pythonAnimal и Vehicle с различными форматами данных. Реализация одной и той же функции serialize() приводит к дублированию кода:
# Плохо: Дублирование кода
class Animal:
def __init__(self, name, species):
self.name = name
self.species = species
def serialize(self) -> dict:
return vars(self)
class Vehicle:
def __init__(self, make, model, year):
self.make = make
self.model = model
self.year = year
def serialize(self) -> dict: # Дублирование!
return vars(self)
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def serialize(self) -> dict: # Дублирование!
return vars(self)
Решение через примеси:
# Миксин обычно предоставляет одну конкретную функцию
class SerializableMixin:
def serialize(self) -> dict:
if hasattr(self, "__slots__"):
return {
name: getattr(self, name)
for name in self.__slots__
}
else:
return vars(self)
# Классы используют mixin без странной иерархии
class Animal:
def __init__(self, name, species):
self.name = name
self.species = species
class Vehicle:
def __init__(self, make, model, year):
self.make = make
self.model = model
self.year = year
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
# Применяем mixin к нужным классам
class SerializableAnimal(Animal, SerializableMixin):
pass
class SerializableVehicle(Vehicle, SerializableMixin):
pass
class SerializablePerson(Person, SerializableMixin):
pass
Когда использовать Mixins
1️⃣ Когда нужно переиспользовать функциональность между несвязанными классами
2️⃣ Когда нужно создать модульный и композируемый код
3️⃣ Когда нужно расширить функциональность сторонних библиотек
Когда НЕ стоит использовать Mixins
1️⃣ Когда функциональность специфична для одного класса
2️⃣ Когда создается слишком сложная иерархия наследования
#основы
@zen_of_python
🤓 — Если изучил досконально
class Tree:
def __init__(self, texture, color, shape, x, y):
self.texture = texture
self.color = color
self.shape = shape
self.x = x
self.y = y
def draw(self):
print(f"Drawing {self.color} {self.shape} at ({self.x}, {self.y})")
# создаём 100.000 деревьев, каждое хранит одинаковую текстуру и форму
forest = [
Tree("oak_texture.png", "green", "oak", x, y)
for x, y in zip(range(1000), range(1000))
]
Каждый объект Tree хранит одинаковые данные (oak_texture.png, "oak", "green"), хотя это лишнее.
С Flyweight
# Общие характеристики
class TreeType:
def __init__(self, texture, color, shape):
self.texture = texture
self.color = color
self.shape = shape
def draw(self, x, y):
# внешние данные передаются параметром
print(f"Drawing {self.color} {self.shape} at ({x}, {y})")
# Фабрика для переиспользования типов деревьев
class TreeFactory:
_tree_types = {}
@classmethod
def get_tree_type(cls, texture, color, shape):
key = (texture, color, shape)
if key not in cls._tree_types:
cls._tree_types[key] = TreeType(texture, color, shape)
return cls._tree_types[key]
# Контекст: хранит только уникальные данные (extrinsic)
class Tree:
def __init__(self, x, y, tree_type):
self.x = x
self.y = y
self.tree_type = tree_type
def draw(self):
self.tree_type.draw(self.x, self.y)
# создаём 100ю000 деревьев, но реально разных TreeType всего 2-3
forest = []
for i in range(100000):
if i % 2 == 0:
tree_type = TreeFactory.get_tree_type("oak_texture.png", "green", "oak")
else:
tree_type = TreeFactory.get_tree_type("pine_texture.png", "darkgreen", "pine")
forest.append(Tree(i, i * 2, tree_type))
# Нарисуем первые пять
for tree in forest[:5]:
tree.draw()
⚡️ У нас 100 000 объектов Tree, но всего 2 объекта `TreeType` (oak и pine). Экономия памяти огромная: вместо хранения 100.000 текстур хранится только 2.
Недостатки паттерна
— Усложнение структуры кода;
— Возможны сложности с сопровождением, особенно при неправильном управлении extrinsic;
— Повышен риск связности — общие объекты могут влиять на многие части системы .
#основы
@zen_of_python