Pythoner
Відкрити в Telegram
Полезные материалы по Python, которые будут интересны опытному и начинающему разработчику. Сотрудничество - @flattys Цены - @serpent_media Канал на бирже: https://telega.in/c/pythonercode
Показати більше6 797
Підписники
-724 години
-117 днів
-4130 день
Архів дописів
6 798
✈️Whylogs - это библиотека для логирования и анализа данных в Python. Она предназначена для легкого отслеживания метрик данных, которые могут помочь в мониторинге и улучшении производительности моделей машинного обучения. Почему это важно? Потому что понимание ваших данных и способов их изменений со временем может существенно повлиять на качество моделей.
➡️Основные функции Whylogs:
—Автоматическое извлечение метрик: Библиотека собирает метрики, такие как распределения, статистики и т.д.
—Поддержка различных форматов данных: Логирование можно выполнять для различных источников данных, включая Pandas DataFrames и потоковые данные.
—Интеграция с другими инструментами: Whylogs легко интегрируется с другими библиотеками и фреймворками.
➡️Пример использования Whylogs:
import whylogs as why
import pandas as pd
# Создание примера данных
data = {
"age": [25, 30, 35, 40, 45],
"income": [50000, 60000, 70000, 80000, 90000]
}
df = pd.DataFrame(data)
# Инициализация логгера
logger = why.logger()
# Логируем данные
logger.log_dataframe(df)
# Генерируем отчет
report = logger.report()
# Сохраняем отчет
report.save("report.whylog")
# Выводим на экран
print(report)
⬆️В этом примере мы создаем DataFrame с двумя колонками: age и income. Затем мы инициализируем Whylogs логгер, логируем наш DataFrame, генерируем и сохраняем отчет.
👀Whylogs предоставляет мощные инструменты для отслеживания и анализа данных, улучшая тем самым процесс разработки, валидации и мониторинга моделей машинного обучения.
🐍Pythoner6 798
Хочешь освоить Python, но не знаешь где брать материалы?
🐍 Ghostly Python — уютное место для изучения Python на практике. Там вы найдёте уроки, скрипты, шпаргалки, и многое другое, что поможет вам стать уверенным разработчиком.
Неважно, новичок вы или опытный программист, — у нас всегда найдётся что-то полезное!
🔥 Заходи прямо сейчас, чтобы не потерять — Ghostly Python!
6 798
Больше AI-сценариев и кое-что совсем неожиданное!
📱Битрикс24 Коллабы – инструмент, который встормошит ваши рабочие чатики! Пространство для совместной работы с внешними командами. Это как если телегу набить задачами, планировщиком встреч, добавить AI и обезопасить от лишних глаз.
Кроме того:
- Работайте над идеями и стратегиями в Досках
- Максимально загружайте ресурсы с Онлайн-записью
- С AI анализируйте скрипты и звонки менеджеров
- Создайте сайт с AI по короткому запросу
- Объединяйтесь на видеозвонках до 1000 человек
Новинки постепенно будут появляться внутри сервиса. Потестить многие, включая Битрикс24 Коллабы, можно уже сейчас и бесплатно.
Узнать больше
#реклама 16+
gravitation.bitrix24.ru
О рекламодателе
6 798
🦆Duck typing — это концепция, позволяющая использовать объекты независимо от их типа, базируясь на их свойствах и методах. Основная идея — не проверять тип объекта напрямую, а пытаться использовать его так, как нам нужно.
👀Преимущества:
—Нет необходимости привязываться к конкретным классам и типам.
—Код становится более гибким и менее связанным.
—Легче расширять и изменять код, добавляя новые типы.
—Упрощает полиморфизм.
➡️Пример кода:
class Bird:
def fly(self):
return "I can fly!"
class Duck(Bird):
def quack(self):
return "Quack!"
class Airplane:
def fly(self):
return "I can also fly!"
def make_it_fly(flyable_thing):
print(flyable_thing.fly())
# Создаем объекты
duck = Duck()
airplane = Airplane()
# Используем их, не смотря на разные типы
make_it_fly(duck) # Выведет: I can fly!
make_it_fly(airplane) # Выведет: I can also fly!
⬆️В этом примере функция make_it_fly принимает любой объект, который имеет метод fly(). Если объект соответствует этому интерфейсу, он будет выполнен, независимо от того, является ли объект уткой, самолетом или чем-то еще.
🔎Duck typing позволяет создавать более гибкий и динамичный код, так как вы можете использовать объекты, которые соответствуют необходимым интерфейсам, не заботясь о их конкретных классах.
🐍Pythoner6 798
Погрузитесь в мир Python с нашим бесплатным курсом!
🎓 Включено 45 уроков, 56 упражнений в тренажере и 163 проверочных теста. Узнаете, как создавать программы, работать с условиями и функциями.
Что вы освоите:
— Составление программ из нескольких модулей.
— Анализ ошибок в коде с использованием отладочной печати.
📚 Курс охватывает основы Python: синтаксис, условия, циклы, типы данных и библиотеки. Практика на каждом шаге поможет вам уверенно использовать язык.
Начните свое обучение с бесплатного базового курса Python и вы сможете создавать несложные программы, а так же анализировать ошибки в коде!
6 798
Запустите рекламу в телеграм-каналах с Яндекс Директом
Перфоманс-реклама теперь в телеграм-каналах ⚡
Яндекс Директ знает, как привлечь целевую аудиторию 💰👌
Попробовать
#реклама
yandex.ru
О рекламодателе
6 798
✈️Serverless архитектура — это модель вычислений в облаке, где разработчики пишут код, а провайдер облачных услуг управляет серверами. Это позволяет сосредоточиться на разработке, не думая о серверной инфраструктуре.
👀Преимущества Serverless Архитектуры:
- Снижение затрат: Платите только за фактическое использование ресурсов, что часто приводит к экономии средств.
- Масштабируемость: Автоматическое масштабирование помогает справляться с любыми нагрузками без необходимости в ручном управлении.
- Упрощение DevOps: Нет необходимости управлять серверами и их конфигурацией.
⭐️Недостатки Serverless Архитектуры:
- Холодный старт: Время, необходимое для инициализации функции, может быть значительным и влиять на производительность.
- Ограничения исполнения: Функции могут иметь ограничения по времени выполнения и памяти, что может быть проблематично для более сложных задач.
- Зависимость от провайдера: Использование специфичных для провайдера технологий может привести к привязке к одному облаку.
➡️Заключение
Serverless архитектура предоставляет мощный инструмент для современных разработчиков, предлагая значительную экономию времени и ресурсов. Однако, важно учитывать её ограничения при выборе данной модели для своего проекта.
🐍Pythoner
6 798
Изучили основы Python, знаете библиотеки и даже создавали небольшие проекты? Но что если проекты вдруг начинают «ломаться» из-за зависимости от других пакетов?😩 Управление окружением — это головоломка для многих разработчиков-новичков.
Представьте, что ваш проект работает без сбоев, библиотеки и зависимости легко настраиваются, а код стабильно запускается на любой машине. Вы уверенно используете инструменты, которые упрощают разработку и позволяют сосредоточиться на самом важном — на коде.
🚀На открытом уроке 27 ноября в 19:00 мск мы разберем управление зависимостями в Python. Покажем, как работать с Pipenv и Poetry, сделаем акцент на практических кейсах и поможем разобраться в тонкостях. А после вебинара вы сможете пройти полный курс «Python Developer. Basic» на самых выгодных условиях, с поддержкой менторов и карьерным треком.
👉Присоединяйтесь к нам и позаботьтесь о будущем вашей карьеры: https://otus.pw/JZ3v/?erid=LjN8K5Rjs
Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.
6 798
✈️Сегодня поговорим о мощном инструменте, который может превратить вас в настоящего код-волшебника – Abstract Syntax Trees (AST). Если вы когда-нибудь задумывались, как работают линтеры, компиляторы или автоматические рефакторинг-инструменты, то добро пожаловать в увлекательный мир синтаксических деревьев!
🔎Представьте, что ваш код – это книга, а AST – её подробное содержание, где каждая глава, параграф и предложение аккуратно структурированы в древовидную форму. Каждый узел такого дерева представляет собой конструкцию вашего кода: функции, классы, операторы и даже отдельные переменные.
➡️В Python работа с AST стала намного проще благодаря встроенному модулю ast. Давайте разберем несколько практических примеров:
💬Базовый анализ кода:
import ast
code = """
def calculate_sum(a, b):
result = a + b
print(f"Sum: {result}")
return result
"""
# Создаем AST
tree = ast.parse(code)
# Анализируем структуру
for node in ast.walk(tree):
if isinstance(node, ast.FunctionDef):
print(f"Найдена функция: {node.name}")
elif isinstance(node, ast.Name):
print(f"Найдена переменная: {node.id}")
⬆️Этот простой пример показывает, как мы можем "гулять" по дереву AST и находить различные элементы кода. Это базовый строительный блок для создания более сложных анализаторов.
💬Трансформация кода:
class DebugTransformer(ast.NodeTransformer):
def visit_FunctionDef(self, node):
# Добавляем отладочный print в начало каждой функции
debug_print = ast.Expr(
value=ast.Call(
func=ast.Name(id='print', ctx=ast.Load()),
args=[ast.Constant(value=f"Вызов функции {node.name}")],
keywords=[]
)
)
node.body.insert(0, debug_print)
return node
# Применяем трансформацию
transformed = DebugTransformer().visit(tree)
⬆️Этот трансформер автоматически добавляет отладочный вывод в начало каждой функции. Представьте, насколько это удобно при отладке большого проекта!
💬Оптимизация кода:
class StringOptimizer(ast.NodeTransformer):
def visit_BinOp(self, node):
# Оптимизация конкатенации строк
if isinstance(node.op, ast.Add):
if isinstance(node.left, ast.Constant) and isinstance(node.right, ast.Constant):
if isinstance(node.left.value, str) and isinstance(node.right.value, str):
return ast.Constant(value=node.left.value + node.right.value)
return node
⬆️Этот оптимизатор находит конкатенацию строковых литералов и объединяет их на этапе компиляции, что улучшает производительность.
➡️Вот несколько интересных применений AST в реальных проектах:
- Статический анализ безопасности: поиск потенциальных уязвимостей в коде
- Автоматическая документация: генерация документации на основе структуры кода
- Миграция кода: автоматическое обновление устаревших конструкций
- Оптимизация производительности: автоматический поиск неэффективных паттернов
➡️Продвинутый пример: Давайте создадим анализатор сложности кода:
class ComplexityAnalyzer(ast.NodeVisitor):
def __init__(self):
self.complexity = 0
def visit_If(self, node):
self.complexity += 1
self.generic_visit(node)
def visit_For(self, node):
self.complexity += 2
self.generic_visit(node)
def visit_While(self, node):
self.complexity += 2
self.generic_visit(node)
# Использование
analyzer = ComplexityAnalyzer()
analyzer.visit(tree)
print(f"Сложность кода: {analyzer.complexity}")
➡️Для тех, кто хочет глубже погрузиться в тему, рекомендую изучить следующие аспекты:
- Работа с типами данных и аннотациями через AST
- Создание собственных декораторов с помощью трансформации AST
- Оптимизация циклов и условных конструкций
- Анализ потока данных в программе
🐍Pythoner6 798
✈️Казалось бы, куда еще проще, но есть один интересный пакет JMESpath, который позволяет декларативно указать, как извлекать элементы из документа JSON.
➡️Основные примеры использования:
import jmespath
jmespath.search('foo.bar', {'foo': {'bar': 'baz'}})
# output: 'baz'
jmespath.search('foo.*.name', {'foo': {'bar': {'name': 'one'}, 'baz':
{'name': 'two'}}})
# output: ['one', 'two']
⬆️Тут нет ничего сложного. Метод search принимает паттерн, по которому требуется извлечь данные, а также словарь (который в общем-то похож на JSON).
➡️Возможностей у пакета достаточно, поэтому он достоен изучения и применения в проектах. Подробнее можно почитать в документации.
🐍Pythoner6 798
Канал для начинающих системных аналитиков!
Здесь вы получите ответы на:
- Какое развитие у системного аналитика и сколько он может получать?
- Как подготовиться к собеседованию?
- Как преодолеть страхи при переходе в IT?
- Как правильно вести коммуникацию с заказчиком?
- Какие ошибки бывают при проектировании?
А так же много практической пользы, которая поможет новичкам начать путь в IT!
Подписаться
#реклама
О рекламодателе
6 798
Чтобы расти в профессии и брать на себя новые роли, нужно не бояться пробовать новое. Например, новое обучение.
Если попробовать курс бесплатно, можно проверить, подходит ли он вам. Тогда пробовать новое уже не так страшно.
Практикум собрал большую экспертизу Яндекса: на курсах вы освоите новые скилы на практике, получите обратную связь от опытной команды и пополните ваше портфолио.
Вот несколько наших курсов:
✅ Мидл Python-разработчик
✅ Мидл Java-разработчик
✅ Мидл Android-разработчик
✅ Мидл фронтенд-разработчик
Получите скидку 20% после прохождения первой темы любого курса. Она бесплатная🔥
6 798
Yandex DataLens Festival, 2-18 декабря
Для аналитиков, тимлидов, разработчиков, продактов и маркетологов.
Эксперты Яндекса поделятся опытом.
Онлайн и бесплатно
Зарегистрироваться
#реклама 16+
yandex.cloud
О рекламодателе
Реклама на Яндексе
6 798
✈️Docker - это платформа для разработки, доставки и запуска приложений в контейнерах. Контейнеры позволяют упаковать приложение со всеми его зависимостями в стандартизированный блок для разработки программного обеспечения.
➡️Основы Docker
💬Образы (Images): Шаблоны для создания контейнеров
💬Контейнеры: Запущенные экземпляры образов
💬Dockerfile: Инструкции для сборки образа
💬Docker Hub: Репозиторий для хранения и обмена образами
➡️Базовые команды Docker:
# Сборка образа
docker build -t my-image .
# Запуск контейнера
docker run -d --name my-container my-image
# Просмотр запущенных контейнеров
docker ps
# Остановка контейнера
docker stop my-container
🔎Продвинутые техники
➡️1. Docker Compose
Docker Compose позволяет определять и запускать многоконтейнерные приложения. Пример docker-compose.yml файла:
version: '3'
services:
web:
build: .
ports:
- "5000:5000"
redis:
image: "redis:alpine"
➡️2. Docker Networking
Docker предоставляет мощные возможности для создания сетей между контейнерами:
💬Bridge networks: Стандартная сеть для контейнеров на одном хосте
💬Overlay networks: Для связи контейнеров на разных хостах
💬Host networking: Использование сети хоста напрямую
➡️3. Docker Volumes
Volumes используются для хранения данных вне контейнеров:
# Создание volume
docker volume create my-vol
# Использование volume при запуске контейнера
docker run -v my-vol:/app/data my-image
➡️4. Docker Swarm
Docker Swarm - это инструмент для оркестрации контейнеров, позволяющий управлять кластером Docker-хостов:
💬Инициализация Swarm: docker swarm init
💬Развертывание сервиса: docker service create
💬Масштабирование: docker service scale
➡️Лучшие практики
💬Используйте многоэтапные сборки для оптимизации образов
💬Минимизируйте количество слоев в Dockerfile
💬Используйте .dockerignore для исключения ненужных файлов
💬Регулярно обновляйте базовые образы для безопасности
➡️Заключение
Docker предоставляет мощный инструментарий для контейнеризации приложений, от простых сценариев до сложных микросервисных архитектур. Освоение Docker открывает новые возможности для разработки, тестирования и развертывания программного обеспечения.
🐍Pythoner6 798
+9
Помощь в трудоустройстве в IT-сфере!
В России из-за дефицита айтишников запустили бесплатную программу по обучению IT-специалистов. Теперь любой желающий может попробовать себя в IT с полного нуля и начать обучение бесплатно!
Узнайте про дальнейшее трудоустройство в ведущие IT-компании для восполнения кадрового дефицита.
Для этого нужно:
- Перейти по ссылке
- Заполнить анкету и ответить на вопросы (занимает менее 3 минут)
- На основании ваших ответов вы сразу узнаете, подходит ли вам сфера IT и сможете ли вы в ней работать
Перейти на сайт
#реклама 16+
urban-university.ru
О рекламодателе
6 798
Представьте, что ваш код – это оркестр в Мариинском театре. Каждый инструмент (поток или корутина) играет свою партию. А вы – дирижёр, который должен убедиться, что все звучит гармонично. Вот только как это сделать, когда все играют одновременно?
➡️1. Изоляция – ключ к успеху
Первое правило тестирования параллельного кода: изолируйте тесты! Каждый тест должен быть как отдельная комната в звукоизолированной студии. Используйте моки и стабы, чтобы симулировать внешние зависимости. Вот пример с использованием unittest.mock:
from unittest.mock import patch
import asyncio
async def fetch_data(url):
# Реальный запрос к API
...
@patch('your_module.fetch_data')
async def test_process_data(mock_fetch):
mock_fetch.return_value = {'key': 'value'}
result = await process_data('http://api.example.com')
assert result == 'processed value'
⬆️Мы изолировали тест от реального API. Теперь он быстрый, как Усэйн Болт, и предсказуемый, как восход солнца!
➡️2. Детерминизм – ваш лучший друг
Асинхронный код может быть непредсказуемым, как погода в Питере. Но ваши тесты должны быть стабильными, как гранитная набережная. Используйте семафоры, события и другие примитивы синхронизации, чтобы контролировать порядок выполнения. Вот пример с использованием asyncio.Event:
import asyncio
async def test_order_of_execution():
event = asyncio.Event()
results = []
async def task1():
await event.wait()
results.append(1)
async def task2():
results.append(2)
event.set()
await asyncio.gather(task1(), task2())
assert results == [2, 1]
⬆️Этот тест всегда будет проходить, даже если вы запустите его на компьютере, работающем на картофельной батарейке!
➡️3. Таймауты – не просто для пиццы
Установка таймаутов в тестах – это как страховка. Вы надеетесь, что она не понадобится, но лучше иметь ее под рукой. Вот как можно использовать таймауты в pytest:
import pytest
import asyncio
@pytest.mark.asyncio
async def test_long_running_task():
with pytest.raises(asyncio.TimeoutError):
await asyncio.wait_for(never_ending_task(), timeout=1.0)
⬆️Этот тест убедится, что ваша функция не зависнет, как старый Windows при запуске Crysis!
➡️4. Асинхронные фикстуры – ваш секретный козырь
В мире async/await фикстуры тоже должны быть асинхронными. Используйте async fixtures в pytest для подготовки и очистки тестового окружения. Вот пример:
import pytest
import asyncio
@pytest.fixture
async def database():
db = await create_database_connection()
yield db
await db.close()
@pytest.mark.asyncio
async def test_database_query(database):
result = await database.fetch('SELECT * FROM users')
assert len(result) > 0
⬆️Эта фикстура – как заботливая мама, которая готовит завтрак перед школой и убирает посуду после. Только вместо завтрака у нас база данных!
➡️5. Параллельное выполнение тестов – двойная выгода
Запуск тестов параллельно не только ускоряет процесс, но и помогает выявить проблемы с состоянием гонки. Используйте pytest-xdist, но будьте осторожны: убедитесь, что ваши тесты действительно независимы друг от друга. Вот команда для запуска:
pytest -n auto your_test_file.py
⬆️Это как устроить гонки Формулы-1 для ваших тестов. Победит самый быстрый и надежный код!
🐍Pythoner6 798
Обучение на Frontend-разработчика. С нуля за 9 месяцев.
На курсе вы получите все навыки, необходимые для старта в профессии Frontend-разработчика.
Персональный наставник middle/senior уровня.
14 проектов, лайвкодинг, хакатоны, репетиции техсобеседования.
Освоите JavaScript, React, TypeScript
Официальный диплом и сертификат школы.
Поддержка наставника по JS в течение 3-х месяцев после диплома.
Гарантия трудоустройства. Если вы не устроитесь, вернём деньги. Это закреплено в договоре п. 6.14
С 9 по 30 ноября 2024 г. скидка 40% на все программы Result School
Узнать больше
#реклама 16+
result.school
О рекламодателе
6 798
✈️Asyncio: ваш секретный ингредиент для высоких нагрузок
Представьте, что ваше приложение – это кухня в популярном ресторане. В синхронном мире у вас один шеф-повар, готовящий блюда по очереди. С asyncio у вас целая команда виртуозов, жонглирующих сковородками и готовящих несколько блюд одновременно. Вот это производительность!
➡️Настройка asyncio: тюнинг вашего кода
💬Выбор правильного event loop. Для Linux-систем рекомендую uvloop – он может разогнать ваше приложение до космических скоростей:
import asyncio
import uvloop
asyncio.set_event_loop_policy(uvloop.EventLoopPolicy())
💬Настройка пула потоков:
loop = asyncio.get_event_loop()
loop.set_default_executor(concurrent.futures.ThreadPoolExecutor(max_workers=10))
💬Семафоры — Они помогут контролировать конкурентность и избежать перегрузок:
sem = asyncio.Semaphore(10)
async def controlled_task(i):
async with sem:
# Ваш асинхронный код здесь
await asyncio.sleep(1)
print(f"Задача {i} выполнена!")
➡️Лайфхаки для покорения высот производительности
💬Замените requests на aiohttp для HTTP-запросов. Это как пересесть с велосипеда на реактивный самолет – скорость поразит ваше воображение!
💬Используйте aiomysql или asyncpg для работы с базами данных. Ваши запросы будут молниеносными, словно Усэйн Болт на стометровке!
💬Профилируйте код с помощью cProfile или yappi. Найдите узкие места и оптимизируйте их, как настоящий хирург производительности.
🔎Продвинутые техники
➡️Используйте асинхронные контекстные менеджеры для элегантной обработки ресурсов:
class AsyncContextManager:
async def __aenter__(self):
print("Entering the matrix...")
await asyncio.sleep(1)
return self
async def __aexit__(self, exc_type, exc, tb):
print("Exiting the matrix...")
await asyncio.sleep(1)
async def main():
async with AsyncContextManager() as manager:
print("We're in!")
➡️Не забывайте про асинхронные генераторы – они могут творить настоящие чудеса в потоковой обработке данных:
async def async_range(start, stop):
for i in range(start, stop):
await asyncio.sleep(0.1)
yield i
async def main():
async for num in async_range(0, 10):
print(num)
➡️Заключение: ваш путь к асинхронному совершенству
Asyncio – это не просто библиотека, это образ мышления. Освоив его, вы сможете создавать приложения, которые будут работать быстрее, эффективнее и элегантнее. Помните: в мире асинхронного программирования нет ничего невозможного!
🐍Pythoner6 798
ТОП-4 Курса по Программированию
⚡Tutortop — маркетплейс курсов №1 по количеству школ-партнеров, курсов и реальных отзывов студентов.
✅Хотите стать программистом, но не знаете с какого языка начать?
Помогаем разобраться в самых популярных и востребованных языках программирования.
Подарок в конце подборки!
Выбрать
#реклама 16+
tutortop.ru
О рекламодателе
6 798
🐍Разбор
Оператор continue используется в циклах для пропуска итерации в цикле.
Таким образом, пока а<4, у нас просто происходит увеличение этой переменной, а из-за условия, итерация (и код ниже) скипаются.
Далее у нас а станет равно 4. У нас не сработает ни один из if'ов и мы добавим это число 4 в result.
Ну и на след. итерации а == 5, у нас сработает break, который принудительно завершит цикл в той же строке.
Ответ: 4
Вже доступно! Дослідження Telegram за 2025 — головні інсайти року 
