DeepCode — это AI-инструмент для Python, способный находить сложные баги, недоступные обычным линтерам.
Он анализирует кодовую базу, предлагает интеллектуальные исправления и экономит время на ручном ревью.
DeepCode можно интегрировать в CI/CD: он автоматически проверяет каждое изменение, выявляя критические ошибки (например, утечки памяти, состояния гонки) до их попадания в продакшен.
Установка:
pip install deepcode
deepcode analyze --path ./my_project
👉 Ссылка
Please open Telegram to view this post
VIEW IN TELEGRAM
❤12🔥1
Она позволяет быстро определить соотношение различных типов сообщений (ошибок, предупреждений, информационных записей) в логах.
Это идеальный инструмент для оперативного анализа проблем, позволяющий с первого взгляда понять, что доминирует в потоке логов.
Установка:
pip install pretty-pie-log.
👉 Статья
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2🔥1🤝1
Она обеспечивает стабильность кода: при изменении объекта создается его новая версия, тогда как исходный остается нетронутым.
Например, при добавлении элемента в
pvector (аналог списка) вы получаете новый список, а старый сохраняет первоначальное состояние.Это минимизирует ошибки и особенно полезно в многозадачных или сложных проектах, где целостность данных критически важна.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4😁1
humanize — удобная библиотека для преобразования чисел, дат и размеров файлов в человеко-понятный вид. Особенно полезна для вывода информации пользователю.
import humanize
import datetime
print(humanize.intcomma(1234567)) # 1,234,567
size = 1536000
print(humanize.naturalsize(size)) # 1.5 MB
dt = datetime.datetime.now() - datetime.timedelta(hours=3)
print(humanize.naturaltime(dt)) # 3 hours ago
pip install humanize
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3
Pandera — мощный инструмент для валидации данных в Python.
Он обеспечивает проверку структуры и содержимого, выступая как дополнительный слой валидации поверх pandas DataFrame и других структур.
✔️ Это позволяет выявлять ошибки на ранних этапах обработки.
Основная задача Pandera — гарантировать соответствие данных ожидаемой схеме, охватывающей типы, диапазоны значений и бизнес-правила.
Установка:
🐍 Ghostly Python |#полезное
Он обеспечивает проверку структуры и содержимого, выступая как дополнительный слой валидации поверх pandas DataFrame и других структур.
Основная задача Pandera — гарантировать соответствие данных ожидаемой схеме, охватывающей типы, диапазоны значений и бизнес-правила.
Установка:
pip install pandera
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
Идеален для парсинга и миграции сайтов, он избавляет от ручной обработки.
Библиотека легко устанавливается через pip и работает как из Python-кода, так и через командную строку. Она гибко настраивается, позволяя определять правила для тегов, форматировать заголовки, обрабатывать таблицы и изображения.
Это экономит массу времени, которое обычно тратится на работу с регулярными выражениями, и значительно упрощает обработку больших объемов текста.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤6
В этой статье рассказывают возможности модуля CSV — от простого чтения файлов до автоматического определения форматов и работы со сложными структурами данных.
На сайте можно найти, как легко импортировать и экспортировать табличные данные, обрабатывать большие объемы информации и избегать распространенных ошибок при работе с CSV.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
This media is not supported in your browser
VIEW IN TELEGRAM
NZT существует.
В фильме «Области тьмы»
герой выпивает NZT — и за день
становится трейдером,
мастером кунг-фу и полиглотом.
Дело не в таблетке.
А в состоянии.
Химия не нужна.
Когда ум чист,
внимание собрано,
и сомнений нет —
ты уже на NZT.
Ты замечаешь всё.
Действуешь без разрывов.
И мир отвечает тебе.
Как включить режим NZT?
Подписывайся на Мэверика.
• входи в состояние
всё «получается само».
• мгновенно принимай
лучшие решения.
• считывай сложные связи
там, где все видят хаос.
• управляй фокусом
и вероятностями событий.
Твоя таблетка NZT.
👇
Мэверик.
Ясность. Точность.
ㅤ
В фильме «Области тьмы»
герой выпивает NZT — и за день
становится трейдером,
мастером кунг-фу и полиглотом.
Дело не в таблетке.
А в состоянии.
Химия не нужна.
Когда ум чист,
внимание собрано,
и сомнений нет —
ты уже на NZT.
Ты замечаешь всё.
Действуешь без разрывов.
И мир отвечает тебе.
Как включить режим NZT?
Подписывайся на Мэверика.
• входи в состояние
всё «получается само».
• мгновенно принимай
лучшие решения.
• считывай сложные связи
там, где все видят хаос.
• управляй фокусом
и вероятностями событий.
Твоя таблетка NZT.
👇
Мэверик.
Ясность. Точность.
ㅤ
💩10❤1👍1
Синхронный парсинг 1000 ссылок занимает около 5 минут.
Переписывать код на чистое asyncio не нужно.
httpx умеет работать с синхронным и асинхронным режимом, а anyio под капотом делает параллельные запросы максимально удобными.
import httpx
import anyio
import time
urls = [f"https://jsonplaceholder.typicode.com/posts/{i}" for i in range(1000)]
start_time = time.time()
async def fetch(client, url, limiter):
async with limiter:
await client.get(url)
async def main():
limiter = anyio.CapacityLimiter(100) # макс. 100 параллельных запросов
async with httpx.AsyncClient(timeout=30) as client:
async with anyio.create_task_group() as task_group:
for url in urls:
task_group.start_soon(fetch, client, url, limiter)
anyio.run(main)
print(f"{len(urls)} запросов выполнено за {time.time() - start_time:.2f} секунд")
💡 По факту: эти 1 000 запросов теперь обрабатываются в ~7.25 секунд, в то время, как с обычным request обработка заняла ~439.82 секунд.
Да, почти в 60 раз быстрее — без заморочек с asyncio, event loop и сложными конструкциями.
Используйте httpx.AsyncClient, устанавливайте адекватный таймаут и всегда ограничивайте параллелизм с помощью CapacityLimiter.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3👍1
Хотите сделать свои Python-скрипты портативными? PyInstaller — ваше решение. Эта библиотека преобразует скрипты в самостоятельные исполняемые файлы, автоматически включая все необходимые зависимости.
Установка:
pip install pyinstaller.Для создания одного файла-приложения используйте команду
pyinstaller --onefile myscript.py. Это идеальный способ делиться вашими утилитами с теми, у кого не установлен Python, обеспечивая их бесперебойную работу.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥9👍4❤3🤝1
В чём разница между shallow copy и deep copy в Python?
Пример
import copy
original = [[1, 2], [3, 4]]
shallow = copy.copy(original)
deep = copy.deepcopy(original)
original[0][0] = 99
print(shallow) # ➔ [[99, 2], [3, 4]]
print(deep) # ➔ [[1, 2], [3, 4]]
Ответ
copy.copy() создаёт поверхностную копию объекта. Это значит, что сам объект копируется, но вложенные объекты продолжают ссылаться на те же данные.
copy.deepcopy() создаёт глубокую копию: копирует и сам объект, и все вложенные объекты, рекурсивно. В результате оригинал и копия полностью независимы.
🟢 Когда использовать:
copy() — если объект неглубокий и вложенные данные не будут изменяться.
deepcopy() — если нужно полностью изолировать копию от оригинала, включая всё содержимое.
❗️Важно: deepcopy может быть медленным на больших и вложенных структурах. Используйте осознанно.
📌 Подходит для работы со сложными структурами данных: списками списков, словарями, графами и т.д.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2👍1
FastAPI-Users — это библиотека для быстрой интеграции системы аутентификации и управления пользователями в приложениях на FastAPI. Она предоставляет готовые модели, маршруты и утилиты для регистрации, входа, восстановления пароля, верификации email и управления сессиями.
from fastapi import FastAPI
from fastapi_users import FastAPIUsers, models
from fastapi_users.authentication import JWTAuthentication
from fastapi_users.db import SQLAlchemyBaseUserTable, SQLAlchemyUserDatabase
from sqlalchemy.ext.declarative import DeclarativeMeta, declarative_base
import sqlalchemy as sa
SECRET_KEY = "mysecretkey"
DATABASE_URL = "sqlite:///./test.db"
Base: DeclarativeMeta = declarative_base()
class UserTable(Base, SQLAlchemyBaseUserTable):
pass
class User(models.BaseUser):
pass
class UserCreate(models.BaseUserCreate):
pass
class UserUpdate(User, models.BaseUserUpdate):
pass
class UserDB(User, models.BaseUserDB):
pass
engine = sa.create_engine(DATABASE_URL)
Base.metadata.create_all(engine)
async def get_user_db():
yield SQLAlchemyUserDatabase(UserDB, engine, UserTable.__table__)
jwt_authentication = JWTAuthentication(
secret=SECRET_KEY, lifetime_seconds=3600, tokenUrl="auth/jwt/login"
)
fastapi_users = FastAPIUsers(
get_user_db,
[jwt_authentication],
User,
UserCreate,
UserUpdate,
UserDB,
)
app = FastAPI()
app.include_router(
fastapi_users.get_auth_router(jwt_authentication),
prefix="/auth/jwt",
tags=["auth"],
)
app.include_router(
fastapi_users.get_register_router(),
prefix="/auth",
tags=["auth"],
)
@app.get("/protected-route")
async def protected_route(user: User = fastapi_users.current_user()):
return {"message": f"Hello, {user.email}!"}
pip install fastapi-users[sqlalchemy]
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥6❤3
Singledispatch позволяет определить общую функцию, которая будет вести себя по-разному в зависимости от типа первого аргумента. Это чистый Python-способ делать то, что в других языках называется перегрузкой функций или полиморфизмом на основе типов. Идеально подходит для создания универсальных обработчиков, парсеров, сериализаторов или форматеров.
from functools import singledispatch
from decimal import Decimal
@singledispatch
def pretty_format(data):
"""Базовый обработчик, вызывается, если тип не найден."""
return f"Неизвестный тип: {type(data).__name__}"
@pretty_format.register(str)
def _(text):
return f"Строка: '{text}' (длина: {len(text)})"
@pretty_format.register(int)
def _(number):
return f"Целое число: {number:#x} (шестнадцатеричное)"
@pretty_format.register(list)
def _(items):
items_str = ", ".join(map(str, items))
return f"Список [{items_str}] из {len(items)} элементов"
@pretty_format.register(float)
@pretty_format.register(Decimal)
def _(num):
return f"Дробное число: {num:.2f}"
print(pretty_format("Привет")) # ➔ Строка: 'Привет' (длина: 6)
print(pretty_format(42)) # ➔ Целое число: 0x2a (шестнадцатеричное)
print(pretty_format([1, 2, 3])) # ➔ Список [1, 2, 3] из 3 элементов
print(pretty_format(3.14159)) # ➔ Дробное число: 3.14
print(pretty_format({"key": "val"})) # ➔ Неизвестный тип: dict (вызвана базовая функция)
# Изменили оригинал — прокси «увидит» это settings["port"] = 9000
# (Эта строка из примера с MappingProxyType здесь не относится, оставлена для аналогии с вашим шаблоном)
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3❤1
def tricky(x, y=[]):
if not y:
z = x.copy()
else:
z = x
z.append(id(y))
return z is x, z
a = [1, 2]
b = [3, 4]
r1 = tricky(a)
r2 = tricky(b, a)
r3 = tricky(b)
print(r1[0], r2[0], r3[0])
print(r1[1], r2[1], r3[1])
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
Что выведет код?
Anonymous Quiz
37%
False True False
29%
False False False
19%
False True True
15%
True True False
👍5👏3👎2💘2❤🔥1
90% айтишников проваливают рост в тимлиды ещё до старта
Они читают книжки, смотрят курсы — а потом ломаются на первом конфликте с командой или бизнесом
В канале Артём Харченков | IT Инсайты:
— Разборы реальных ситуаций из жизни тимлида
— Как выглядят правильные решения глазами тимлида
— Чем отличается сильный айтишник от тимлида
Подписывайся, если хочешь понимать, как устроено тимлидство изнутри: @teamlead_insights
Они читают книжки, смотрят курсы — а потом ломаются на первом конфликте с командой или бизнесом
В канале Артём Харченков | IT Инсайты:
— Разборы реальных ситуаций из жизни тимлида
— Как выглядят правильные решения глазами тимлида
— Чем отличается сильный айтишник от тимлида
Подписывайся, если хочешь понимать, как устроено тимлидство изнутри: @teamlead_insights
❤1
subprocess — встроенный модуль Python для запуска внешних программ, выполнения команд shell и взаимодействия с процессами. Полезен при автоматизации, DevOps-скриптах и интеграции с CLI-инструментами.import subprocess
# Выполняем команду ls (или dir на Windows)
result = subprocess.run(["ls", "-l"], capture_output=True, text=True)
# Печатаем результат
print(result.stdout)
1.
subprocess.run([...]) запускает команду и ожидает завершения.2.
capture_output=True сохраняет вывод команды.3.
text=True возвращает результат в виде строки (а не байтов).Отлично подходит для автоматизации сборки, запуска скриптов, управления системными утилитами и бэкапами
Please open Telegram to view this post
VIEW IN TELEGRAM
Хороший айтишник ≠ хороший руководитель
И это причина, почему большинство застревают в своем развитии.
📊 Управление — это отдельный навык.
В канале Апазиди АйТи показывают, как его развить в реальном IT.
▪️ управленческие ошибки, которые тихо ломают карьеру
▪️ почему созвоны — признак слабой системы
▪️ как строить команды без постоянного контроля
Читай тут: 👉 https://t.me/+Jcx__bY56BwwN2Uy
И это причина, почему большинство застревают в своем развитии.
В канале Апазиди АйТи показывают, как его развить в реальном IT.
Читай тут: 👉 https://t.me/+Jcx__bY56BwwN2Uy
Please open Telegram to view this post
VIEW IN TELEGRAM
base64 — кодирование и декодирование данныхПозволяет безопасно передавать двоичные данные в текстовом формате, что полезно для хранения изображений, передачи данных через URL и работы с токенами.
import base64
message = b"Hello, world!"
# Кодируем в Base64
encoded = base64.b64encode(message)
print(encoded.decode()) # SGVsbG8sIHdvcmxkIQ==
# Декодируем обратно
decoded = base64.b64decode(encoded)
print(decoded.decode()) # Hello, world!
b64encode() преобразует данные в безопасный текстовый формат.b64decode() возвращает исходные двоичные данные.Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
Позволяет экземплярам класса вести себя как функции, то есть их можно «вызывать» с помощью круглых скобок (). Полезно для создания объектов с состоянием, которые могут хранить данные между вызовами, или для реализации декораторов на классах.
class Counter:
def init(self):
self.count = 0
def __call__(self):
self.count += 1
return self.count
Создаём объект
counter = Counter()
Вызываем объект как функцию
print(counter()) # 1
print(counter()) # 2
print(counter()) # 3
---
Более практичный пример: кэширующий декоратор на классе
class Memoize:
def __init__(self, func):
self.func = func
self.cache = {}
def __call__(self, *args):
if args not in self.cache:
self.cache[args] = self.func(*args)
return self.cache[args]
@Memoize
def fibonacci(n):
if n < 2:
return n
return fibonacci(n-1) + fibonacci(n-2)
print(fibonacci(10)) # Быстро, т.к. значения кэшируются
— Метод call вызывается, когда экземпляр класса используется как функция.
— Объект может сохранять внутреннее состояние между вызовами.
— Позволяет создавать более гибкие и читаемые конструкции, особенно когда нужно сочетать данные и поведение.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4❤🔥1😁1