Программистика
قناة بسيطة
Лучший канал про python Ссылка для друга: https://t.me/+Ai6ughKtf5g2ZmFi Купить рекламу: https://telega.in/c/+Ai6ughKtf5g2ZmFi Админ: @JeyRahol По рекламе: @ReivuManager
إظهار المزيد5 791
المشتركون
-624 ساعات
+157 أيام
-4130 أيام
أرشيف المشاركات
5 789
Хороший айтишник ≠ хороший руководитель
И это причина, почему большинство застревают в своем развитии.
📊 Управление — это отдельный навык.
В канале Апазиди АйТи показывают, как его развить в реальном IT.
▪️управленческие ошибки, которые тихо ломают карьеру
▪️почему созвоны — признак слабой системы
▪️как строить команды без постоянного контроля
Читай тут: 👉 https://t.me/+F_6p7j93h8QxZWVi
5 789
Ухватил ОФФЕР с ЗП более чем 500к🤑
Несколько раз в месяц Топовые IT компании выкладывают вакансии с огромной зарплатой даже у джунов, а я расскажу как попасть на ТимЛида‼️
Я — Артем и в своём телеграм канале рассказываю:
🔴 Как максимально быстро вырасти до Тим Лида в IT компаний с нуля — [Инструкция]
🔴 Как собрать лучшую команду на удалёнке — [Пояснение]
🔴Подсказки и фишечки от ТимЛида с 13 летним опытом — [Список]
Подписаться можно тут: https://t.me/+dbAZSx8rR1swMTky
5 789
Сетевое программирование на Python
Книга посвящена разработке серверных приложений и клиент-серверных архитектур на Python. Рассказано о поддержке SSL в Python 3, представлены примеры работы с протоколами TCP, UDP, HTTP, SMTP, IMAP, FTP, RPC, взаимодействия c сервисами DNS. Освещена работа с электронной почтой в приложениях. Описаны цели протокола TLS и методы их достижения на Python. Подробно описаны возможности модуля asyncio, входящего в состав Python 3.4, даны рекомендации по разработке сетевых приложений с использованием веб-фреймворков Flask и Django. Для программистов.Программистика|| #doc
5 789
👩💻 Ctypes Python – Огромная скорость и БЕЗОПАСНОСТЬ компонентов
🎥 ПервоисточникПрограммистика|| #video
5 789
Сеньор за полгода? 📈
Эта девушка получила оффер в IT-компанию, хотя весь её опыт — пара курсов с ютуба 😱
Она воспользовалась ИИ-помощником и легко скрыла все свои пробелы в знаниях.
Теперь впереди: ⤵️
удалёнка, стартовое обучение и ставка 55$ в час.
Проходи собеседования вместе с Interview Ninja 🥷
Проверь успех на себе — есть 100 бесплатных запросов на день.
👉 @interview_ninja
5 789
НАЧАЛО. Премиальные квартиры в Доме-Вселенной на Пресне
НАЧАЛО - новый дом в центре столицы, рядом с Москва-Сити. Проект по-настоящему космического масштаба, где есть все, чтобы раскрыть себя и свои возможности.
- Три двора: детский, спортивный, двор для медитаций
- Террасный променад с зонами для спорта, отдыха, детских игр
- Детский клуб, репетиторские, коворкинги, переговорные, библиотека, кинотеатр
- Фитнес-центр с бассейном
- Образовательный центр
- «Улица ресторанов»
Квартиры - от однокомнатных до просторных резиденций и пентхаусов. С потолками до 4 м и панорамными окнами в пол, за которыми - великолепные виды на Сити, центр Москвы, набережные, Воробьевы горы, Лужники.
Сегодня вы можете купить квартиры в доме НАЧАЛО с рассрочкой 0% на 3 года.
Узнать больше
Проектная декларация на сайте https://наш.дом.рф/. Застройщик: "СЗ "НАЧАЛО".
#реклама
nachalo-na-presne.ru
О рекламодателе
5 789
Простые способы сэкономить память в Python
Если код разрастается, память летит в трубу. Вот как её прижать.
1️⃣ Что экономить в первую очередь?
Данные. Именно они - главные пожиратели ОЗУ, а не сам код.
2️⃣ Пример: кортеж vs. класс
# Фигня, которая жрёт память
class Point:
def __init__(self, x, y):
self.x = x
self.y = y
# Более плотное хранение
from collections import namedtuple
Point = namedtuple('Point', ['x', 'y'])
# Или просто кортеж (x, y)
3️⃣ Почему это работает?
Структуры без __dict__ (кортежи, namedtuple, dataclass с frozen=True) занимают меньше места, чем обычные классы. Для миллиона объектов разница - десятки мегабайт.
4️⃣ Ещё один лайфхак: sys.intern() для строк
import sys
massive_list_of_names = [sys.intern(name) for name in raw_data]
Это чертовски полезно, если в данных много повторяющихся строк (теги, статусы, имена). Экономит кучу места.
5️⃣ А что насчет массивов?
Используй array.array или numpy для чисел. Хранение миллиона int'ов в списке - это долго и дорого. В специальном массиве - в разы компактнее.
Программистика ||#article5 789
🤔 Asyncio 🆚 Threading vs Multiprocessing: Гонка за производительностью в Python
Когда нужно ускорить код, новички часто создают потоки для всего подряд ("многопоточность же быстрее!"), а потом удивляются, почему Python с GIL не летает. Сеньоры спорят между asyncio, threading и multiprocessing, забывая, что у каждого инструмента своя работа. Разбираемся, когда что запускать.
🧱 Когда `asyncio` — это хорошо (I/O-bound задачи с многочисленными операциями):
Asyncio идеален, когда программа много времени ждёт ввода-вывода: сетевые запросы, работа с базами данных, взаимодействие с API.
1️⃣. Веб-скрейпинг и API-запросы:
import aiohttp
import asyncio
async def fetch_page(session, url):
async with session.get(url) as response:
return await response.text()
async def main():
async with aiohttp.ClientSession() as session:
urls = ["http://site1.com", "http://site2.com"]
tasks = [fetch_page(session, url) for url in urls]
pages = await asyncio.gather(*tasks) # Все запросы параллельно!
2️⃣. Веб-серверы (FastAPI, aiohttp):
# FastAPI сам использует asyncio
from fastapi import FastAPI
import asyncio
app = FastAPI()
@app.get("/")
async def read_root():
await asyncio.sleep(0.1) # Не блокирует другие запросы
return {"Hello": "World"}
3️⃣. Работа с несколькими сокетами/соединениями:
# Чат-сервер, прокси, бот для мессенджера
🧱 Когда `asyncio` — это ПЛОХО (антипаттерны):
1. CPU-интенсивные задачи:
❌ Бесполезно:
async def calculate_primes(limit):
primes = []
for num in range(2, limit):
# Тяжелые вычисления БЛОКИРУЮТ event loop!
if all(num % i != 0 for i in range(2, int(num**0.5) + 1)):
primes.append(num)
return primes
2. Блокирующие вызовы без специальной обёртки:
❌ Заблокирует весь event loop:
async def read_large_file():
with open("huge.csv", "r") as f:
data = f.read() # Синхронный I/O!
return data
🧱 Когда `threading` — это хорошо (I/O-bound с блокирующими библиотеками):
Threading спасает, когда нужно работать с библиотеками, которые не поддерживают asyncio, но много ждут.
1️⃣. GUI-приложения (Tkinter, PyQt):
# Отдельный поток для долгой операции, чтобы интерфейс не зависал
import threading
import tkinter as tk
def long_operation():
# Имитация долгой операции
time.sleep(5)
print("Готово!")
def start_in_thread():
thread = threading.Thread(target=long_operation)
thread.start() # GUI остаётся отзывчивым
2️⃣. Параллельные HTTP-запросы с requests (синхронной):
import threading
import requests
def fetch_url(url):
response = requests.get(url) # Синхронная библиотека
return response.text
threads = []
for url in urls:
thread = threading.Thread(target=fetch_url, args=(url,))
thread.start()
threads.append(thread)
3️⃣. Чтение/запись файлов на медленных дисках:
# Пока один поток ждёт диск, другой может работать
🧱 Когда `threading` — это ПЛОХО (опасно и бесполезно):
1. CPU-задачи в Python (из-за GIL):
❌ Не ускорит, а замедлит:
def calculate():
result = 0
for i in range(10_000_000):
result += i
return result
# 4 потока будут работать МЕДЛЕННЕЕ, чем 1 поток из-за GIL и переключений
2. Общие изменяемые данные без блокировок:
❌ Состояние гонки (race condition):
counter = 0
def increment():
global counter
for _ in range(1000000):
counter += 1 # Неатомарная операция!
# Результат непредсказуем, будет меньше 2_000_000
Скорость приходит не от слепого использования потоков, а от правильного сопоставления задачи и инструмента.
🔗 Подробнее в статье
Программистика|| #doc5 789
Самые дорогие ошибки в IT выглядят так же, как обычный рабочий день.
Один деплой — и минус прод.
Вот как это было на самом деле:
🔥 GitLab — стерли базу
🔥 Knight Capital — минус 440 млн за 30 минут
🔥 Facebook — 6 часов тишины
Если работаешь с продом — тебе сюда.
5 789
👀 Causal Inference на Python. Причинно-следственные связи в IT-разработке
Сколько покупателей привлечет дополнительный доллар, вложенный в онлайн-рекламу? Какие клиенты будут покупать только по скидочному купону? Как разработать оптимальную стратегию ценообразования? Причинно-следственный анализ (casual inference) — лучший способ разобраться, как влиять на бизнес-метрики, которыми вы хотите управлять. И для этого понадобится всего пара строк кода на Python. Матеуш Факур рассказывает про малоизвестные применения причинно-следственного анализа, с помощью которых можно оценить влияние воздействия на результат.
Программистика|| #doc
5 789
Создание приложения на Python и Flask
Flask — один из самых популярных веб-фреймворков для Python. Его используют как новички, так и профессиональные разработчики. В этой инструкции мы покажем, как с ним работать, создав простое приложение.
➡️ Читать статью
Программистика || #article
5 789
🖥 Prefect - это оркестрации рабочих процессов с открытым исходным кодом, предназначенный для создания надежных конвейеров обработки данных на Python!
👍 Он позволяет превращать Python-скрипты в производственные рабочие процессы с минимальными усилиями, обеспечивая автоматическое отслеживание состояния, обработку ошибок, планирование задач и мониторинг в реальном времени. С помощью Prefect вы можете строить динамические и устойчивые конвейеры данных, которые адаптируются к изменениям и восстанавливаются после сбоев.🐱 Ссылка на GitHub Программистика || #Library
5 789
НЕ ПОКУПАЙ КУРСЫ В ИНТЕРЕНЕТ И НЕ ИДИ В ВУЗ!
❌ Курсы — СКАМ чистой воды,
❌ В ВУЗ'е тебя учат 60 летние бабки программировать в 1С
Самый лучший вариант — канал Влада
Все знания в IT, которые он получил за 11+ лет коммерческого опыта он рассказывает в своём канале абсолютно бесплатно.
Всего 10 минут в день в канале Влада и ты поймешь, как нужно правльно учиться и искать работу👇
https://t.me/+Nrnh4uEZr7szY2Yy
5 789
📦 Мемоизация: магия @lru_cache или свой велосипед?
Нужно считать тяжёлые функции быстро? Запомни результат - не считай по 100 раз.
1️⃣ В чём суть
Мемоизация - это кеширование возвращаемых значений функции для уже обработанных аргументов.
2️⃣ Стандартный путь: @lru_cache
from functools import lru_cache
@lru_cache(maxsize=128)
def fibonacci(n: int) -> int:
if n < 2:
return n
return fibonacci(n - 1) + fibonacci(n - 2)
# Всё. Работает. Не надо думать.
3️⃣ Свой велосипед: замыкания
def manual_memoize(func):
cache = {} # Вот и весь секрет - словарь в замыкании
def wrapper(*args):
if args not in cache:
cache[args] = func(*args)
return cache[args]
return wrapper
@manual_memoize
def heavy_calculation(x):
# Какая-то долгая хрень
return x * x
4️⃣ Зачем это надо?
🔴 @lru_cache - готово, проверено, есть TTL и статистика. 🔴 Свой кеш - полный контроль, микрооптимизации, нестандартные ключи. 🔴 Не надо тащить либы для одной фичи. 🔴 Понять, как работает магия внутри.5️⃣ Нюансы
🔴 @lru_cache не работает с unhashable аргументами (списки, словари) без костылей. 🔴 Ручной кеш - твоя ответственность за очистку и утечки памяти. 🔴 Для 99% случаев встроенного декоратора хватает за глаза.Программистика ||#article
5 789
📦 Мемоизация: магия @lru_cache или свой велосипед?
Нужно считать тяжёлые функции быстро? Запомни результат - не считай по 100 раз.
1️⃣ В чём суть
Мемоизация - это кеширование возвращаемых значений функции для уже обработанных аргументов.
2️⃣ Стандартный путь: @lru_cache
from functools import lru_cache
@lru_cache(maxsize=128)
def fibonacci(n: int) -> int:
if n < 2:
return n
return fibonacci(n - 1) + fibonacci(n - 2)
# Всё. Работает. Не надо думать.
3️⃣ Свой велосипед: замыкания
def manual_memoize(func):
cache = {} # Вот и весь секрет - словарь в замыкании
def wrapper(*args):
if args not in cache:
cache[args] = func(*args)
return cache[args]
return wrapper
@manual_memoize
def heavy_calculation(x):
# Какая-то долгая хрень
return x * x
4️⃣ Зачем это надо?
🔴 @lru_cache - готово, проверено, есть TTL и статистика. 🔴 Свой кеш - полный контроль, микрооптимизации, нестандартные ключи. 🔴 Не надо тащить либы для одной фичи. 🔴 Понять, как работает магия внутри.5️⃣ Нюансы
🔴 @lru_cache не работает с unhashable аргументами (списки, словари) без костылей. 🔴 Ручной кеш - твоя ответственность за очистку и утечки памяти. 🔴 Для 99% случаев встроенного декоратора хватает за глаза.Программистика ||#article
5 789
Лицо Udemy представили? — тут слили кучу курсов по IT от онлайн школ
Материала почти на пол-терабайта, мы загрузили всё на канал, там есть:
🐍 Python и нейросети (28 полных курсов + библиотеки)
📈 Data Analysis + машинное обучение (15 курсов)
👨🏻💻 Frontend (от JS до React) — (20 курсов + библиотеки)
🤖 Backend + базы Данных (30 курсов)
🛡 Информационная безопасность (Защита+Атака) — (14 курсов)
🎮 Разработка игр (11 курсов)
Всё можно забрать бесплатно и смотреть без скачивания ➡️ @IT_SLIV
5 789
👩💻 Модули vs Классы: Когда функции достаточно, а когда без ООП не обойтись
В Python есть два подхода к организации кода: процедурный (модули с функциями) и объектно-ориентированный (классы). Новички часто создают классы там, где хватит функций ("это же круче!"), а сеньоры ругают избыточные иерархии. Разбираемся, где что использовать.
🧱 Когда `модули с функциями` — это достаточно и правильно:
Простой модуль с функциями идеален, когда у вас нет состояния или оно минимально, а логика представляет собой набор операций.
1️⃣. Утилитарные функции (pure functions):
# math_utils.py — идеальный модуль
def clamp(value, min_val, max_val):
return max(min_val, min(value, max_val))
def lerp(start, end, factor):
return start + (end - start) * factor
# Никакого состояния, только преобразования
2️⃣. Конфигурация и константы:
# config.py — лучше модуля, чем класса-синглтона
DATABASE_URL = "postgresql://localhost/db"
API_TIMEOUT = 30
LOG_LEVEL = "INFO"
3️⃣. Скрипты и одноразовые задачи:
# data_cleaner.py — запустили, отработали, завершили
import pandas as pd
def load_data(path):
return pd.read_csv(path)
def clean_data(df):
return df.dropna()
if __name__ == "__main__":
df = load_data("data.csv")
cleaned = clean_data(df)
# Всё, классы не нужны
🧱 Когда `классы` — это необходимость, а не прихоть:
1. Когда есть состояние (stateful объекты):
❌ Слабое решение на функциях:
balance = 1000
def withdraw(amount):
global balance # Опасно! Глобальное состояние
balance -= amount
return balance
✅ Чистый ООП-подход:
class BankAccount:
def __init__(self, initial_balance):
self._balance = initial_balance # Инкапсуляция
def withdraw(self, amount):
if amount <= self._balance:
self._balance -= amount
return self._balance
2. Когда нужен полиморфизм:
class Notification:
def send(self, message):
raise NotImplementedError
class EmailNotification(Notification):
def send(self, message):
# Логика отправки email
pass
class SMSNotification(Notification):
def send(self, message):
# Логика отправки SMS
pass
# Одна функция работает с разными типами
def notify_users(users, notification: Notification):
for user in users:
notification.send(f"Hello, {user.name}!")
3. Когда объект имеет жизненный цикл:
class DatabaseConnection:
def __init__(self, connection_string):
self.conn = None
self.connection_string = connection_string
def __enter__(self):
self.conn = connect(self.connection_string)
return self
def __exit__(self, *args):
self.conn.close()
def execute(self, query):
return self.conn.execute(query)
# Контекстный менеджер управляет жизненным циклом
🧱 Антипаттерны (что делать НЕ НАДО):
1. Класс как namespace для функций:
❌ Бессмысленный класс:
class MathOperations:
@staticmethod
def add(a, b):
return a + b
@staticmethod
def multiply(a, b):
return a * b
# Используем: MathOperations.add(2, 3) — избыточно!
✅ Просто модуль:
# math_ops.py
def add(a, b):
return a + b
def multiply(a, b):
return a * b
2. Функции там, где нужно состояние:
❌ Функции с кучей параметров:
def process_user_data(user_id, db_conn, cache, logger, config):
# 5 параметров — явный признак, что нужен класс
pass
✅ Класс, инкапсулирующий зависимости:
class UserProcessor:
def __init__(self, db_conn, cache, logger, config):
self.db = db_conn
self.cache = cache
self.logger = logger
self.config = config
def process(self, user_id):
# Все зависимости уже есть в self
pass
💡 Практическое правило выбора:
Выбирай модуль с функциями, если:
🟢 Операции не имеют состояния (pure functions) 🟢 Данные преобразуются, а не хранятся 🟢 Нужен набор утилит или констант 🟢 Код будет использоваться как библиотека🔗 Подробнее в статье Программистика ||#article
