Pythoner
7.23K subscribers
860 photos
27 videos
4 files
654 links
Полезные материалы по Python, которые будут интересны опытному и начинающему разработчику.

Сотрудничество - @flattys
Цены - @serpent_media

Канал на бирже: https://telega.in/c/pythonercode
Download Telegram
👍62
👍6🤔51🤓1
🐍Разбор

z = [x, y] создает список z, содержащий два элемента: список x и список y. Таким образом, z — это [[1, 2, 3], [4, 5]]. y.append(6) добавляет элемент 6 в конец списка y. После этой операции y становится [4, 5, 6]. Поскольку z содержит ссылки на x и y, любые изменения, внесенные в x или y, будут отражены в z. Когда y изменяется путем добавления 6, это изменение становится видимым в z, поскольку z содержит ссылку на исходный список y.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍114🔥2
➡️Что такое декораторы?

Декораторы в Python - это мощный инструмент для изменения поведения функций или классов без изменения их исходного кода. Они позволяют "обернуть" существующую функцию дополнительной функциональностью.

➡️Зачем нужен functools.wraps?

При создании декораторов возникает проблема: метаданные декорируемой функции (такие как имя и документация) теряются. Здесь на помощь приходит functools.wraps!

➡️Пример декоратора без functools.wraps

def my_decorator(func):
def wrapper(*args, **kwargs):
print("До выполнения функции")
result = func(*args, **kwargs)
print("После выполнения функции")
return result
return wrapper

@my_decorator
def greet(name):
"""Эта функция приветствует пользователя"""
print(f"Привет, {name}!")

print(greet.__name__) # Выводит: wrapper
print(greet.__doc__) # Выводит: None


➡️Пример с использованием functools.wraps

from functools import wraps

def my_decorator(func):
@wraps(func)
def wrapper(*args, **kwargs):
print("До выполнения функции")
result = func(*args, **kwargs)
print("После выполнения функции")
return result
return wrapper

@my_decorator
def greet(name):
"""Эта функция приветствует пользователя"""
print(f"Привет, {name}!")

print(greet.__name__) # Выводит: greet
print(greet.__doc__) # Выводит: Эта функция приветствует пользователя


🔎Преимущества использования functools.wraps:
1. Сохранение метаданных функции
2. Улучшение отладки и документирования
3. Совместимость с инструментами анализа кода

🐍Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
👍95🔥3
✈️Модуль weakref предоставляет инструменты для создания слабых ссылок на объекты.

➡️Что такое слабые ссылки?

Слабые ссылки позволяют ссылаться на объект без увеличения его счетчика ссылок. Это означает, что объект может быть удален сборщиком мусора, даже если на него есть слабая ссылка.

➡️Пример использования weakref:

import weakref

class MyClass:
pass

obj = MyClass()
weak_ref = weakref.ref(obj)

print(weak_ref()) # Выводит объект MyClass
del obj
print(weak_ref()) # Выводит None


🔎Заключение

Использование модуля weakref позволяет разработчикам Python лучше контролировать управление памятью в своих программах. Это особенно полезно при работе с большими объемами данных или в системах с ограниченными ресурсами.

🐍Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
7👍6
Forwarded from IT memer
Please open Telegram to view this post
VIEW IN TELEGRAM
😁20🔥6👍42
✈️Legacy код, или унаследованный код, - это существующая кодовая база, которая продолжает использоваться, несмотря на то, что она может быть устаревшей, плохо структурированной или трудной для поддержки.

➡️Характеристики Legacy кода
💬Устаревшие технологии или методологии
💬Отсутствие или недостаточность документации
💬Сложность в поддержке и расширении
💬Высокая связность и низкая сплоченность

➡️Пример Legacy кода

# Legacy код на Python
def calculate_total(items):
total = 0
for item in items:
total = total + item['price'] * item['quantity']
return total

# Современный эквивалент
def calculate_total(items):
return sum(item['price'] * item['quantity'] for item in items)


➡️Проблемы, связанные с Legacy кодом
💬Сложность внесения изменений и добавления новых функций
💬Повышенный риск появления ошибок при модификации
💬Трудности в интеграции с современными технологиями
💬Зависимость от устаревших библиотек и фреймворков

➡️Стратегии работы с Legacy кодом
💬Постепенный рефакторинг
💬Написание тестов для существующего кода
💬Документирование существующей функциональности
💬Модульная замена частей системы

🔎Заключение

Работа с Legacy кодом - это неизбежная часть жизни многих разработчиков. Хотя он может представлять сложности, правильный подход к его обработке может значительно улучшить качество и поддерживаемость программного обеспечения.

🐍Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
👍123🔥3
✈️FastStream - это мощная библиотека для Python, которая упрощает создание и управление потоковыми приложениями. Она предоставляет удобный интерфейс для работы с различными брокерами сообщений, такими как Kafka и RabbitMQ.

➡️Основные преимущества FastStream
💬Простота использования
💬Высокая производительность
💬Поддержка асинхронного программирования
💬Легкая интеграция с существующими проектами

➡️Установка FastStream

Для начала работы с FastStream, установите библиотеку с помощью pip:

pip install faststream


➡️Давайте рассмотрим простой пример использования FastStream с Kafka:

from faststream import FastStream, Logger
from faststream.kafka import KafkaBroker

# Создаем брокер Kafka
broker = KafkaBroker("localhost:9092")

# Инициализируем FastStream
app = FastStream(broker)

# Определяем обработчик сообщений
@broker.subscriber("input-topic")
async def process_message(msg: str, logger: Logger):
logger.info(f"Получено сообщение: {msg}")
# Обработка сообщения
processed_msg = msg.upper()
# Отправка обработанного сообщения
await broker.publish(processed_msg, "output-topic")

# Запускаем приложение
if __name__ == "__main__":
app.run()


⬆️В этом примере мы:
1. Импортируем необходимые модули из FastStream.
2. Создаем брокер Kafka, указывая адрес сервера.
3. Инициализируем FastStream с нашим брокером.
4. Определяем функцию-обработчик сообщений с декоратором @broker.subscriber.
5. В обработчике мы логируем полученное сообщение, преобразуем его в верхний регистр и отправляем в другую тему.
6. Запускаем приложение с помощью app.run().

🐍Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
👍74🔥3
✈️Что такое concurrent.futures?

Представьте, что вы супергерой, способный делать несколько дел одновременно. Это и есть concurrent.futures! Этот мощный модуль в Python позволяет вам выполнять задачи параллельно, экономя драгоценное время и ресурсы.

➡️Основные инструменты

В нашем арсенале два главных оружия:
💬ThreadPoolExecutor - для задач, связанных с вводом-выводом
💬ProcessPoolExecutor - для вычислительно-интенсивных задач

➡️Простой пример использования ThreadPoolExecutor:

import concurrent.futures
import time

def task(name):
print(f"Задача {name} начата")
time.sleep(2)
return f"Задача {name} завершена"

with concurrent.futures.ThreadPoolExecutor(max_workers=3) as executor:
tasks = [executor.submit(task, f"#{i}") for i in range(5)]

for future in concurrent.futures.as_completed(tasks):
print(future.result())

⬆️Мы только что создали многопоточное приложение, которое выполняет 5 задач параллельно, используя пул из 3 потоков.

🔎Преимущества использования concurrent.futures
💬Повышение производительности
💬Простота использования
💬Автоматическое управление потоками
- 💬Гибкость в настройке

➡️Заключение

Поздравляем! Теперь вы знаете, как создавать многопоточные приложения с помощью concurrent.futures. Это мощный инструмент, который поможет вам писать более эффективный и быстрый код. Не забывайте практиковаться и экспериментировать - ведь в мире многопоточности возможности безграничны!

🐍Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🔥43
Forwarded from IT memer
Please open Telegram to view this post
VIEW IN TELEGRAM
🤣17👍3😁2
➡️Зачем нужно профилирование?

Представьте, что ваш код - это спортивный автомобиль. Профилирование - это как диагностика двигателя. Оно помогает найти "узкие места" и раскрыть истинный потенциал вашего кода.

➡️cProfile: Ваш верный помощник

cProfile - это встроенный инструмент Python для профилирования. Он как супергерой, который анализирует каждую функцию вашего кода.

import cProfile

def my_function():
# Ваш код здесь
pass

cProfile.run('my_function()')

⬆️Теперь у вас есть детальный отчет о работе вашей функции.

➡️line_profiler: Микроскоп для вашего кода

Если cProfile - это общая картина, то line_profiler - это микроскоп. Он анализирует каждую строку кода. Потрясающе, не так ли?

@profile
def my_function():
# Ваш код здесь
pass

# Запустите с: kernprof -l -v your_script.py

⬆️Теперь вы видите, сколько времени занимает каждая строка. Это как рентген для вашего кода!

➡️Практические советы:
💬Профилируйте регулярно: Это как чистка зубов для вашего кода!
💬Фокусируйтесь на горячих точках: 80% времени обычно тратится на 20% кода.
💬Не оптимизируйте преждевременно: Сначала убедитесь, что код работает правильно.

➡️Заключение:
Профилирование - это ваш секретный ингредиент для создания быстрого и эффективного Python-кода. С cProfile и line_profiler в вашем арсенале, вы готовы покорить любые вершины производительности!

🐍Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
5👍3🔥1
✈️Функция sample() позволяет выбрать случайным образом элементы из последовательности или коллекции. Это удобно при необходимости получить случайную выборку из данных.

➡️Функция принимает два основных аргумента:
💬population — последовательность, из которой надо выбрать элементы (list, tuple, string и т. д.)
💬k — количество элементов для выборки.

➡️Дополнительные аргументы:
💬counts — список весов элементов (по умолчанию равновероятный выбор).
💬rng — генератор случайных чисел (по умолчанию берется из модуля random).

➡️Пример:
from random import sample

letters = ['a', 'b', 'c', 'd', 'e']

result = sample(letters, k=3)

print(result)


⬆️В примере из списка букв берется случайная выборка размером 3 элемента. Результат при каждом запуске будет разный.

🐍Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
👍73🔥21
✈️В мире современных технологий машинное обучение играет ключевую роль. Одним из самых популярных инструментов для разработки и обучения нейронных сетей является PyTorch.

PyTorch - это открытая библиотека машинного обучения, разработанная Facebook AI Research. Она предоставляет гибкий и интуитивно понятный интерфейс для создания сложных нейронных сетей.

➡️Основы создания нейронной сети в PyTorch.
Создание нейронной сети в PyTorch начинается с определения архитектуры. Вот простой пример:

import torch.nn as nn

class SimpleNN(nn.Module):
def __init__(self):
super(SimpleNN, self).__init__()
self.fc1 = nn.Linear(784, 128)
self.fc2 = nn.Linear(128, 10)

def forward(self, x):
x = torch.relu(self.fc1(x))
x = self.fc2(x)
return x

⬆️Этот код определяет простую нейронную сеть с двумя полносвязными слоями.

➡️Обучение нейронной сети

Обучение - это процесс, в котором сеть корректирует свои веса для минимизации ошибки предсказания. Вот базовый цикл обучения:

optimizer = torch.optim.Adam(model.parameters(), lr=0.001)
criterion = nn.CrossEntropyLoss()

for epoch in range(num_epochs):
for batch in data_loader:
optimizer.zero_grad()
outputs = model(batch)
loss = criterion(outputs, targets)
loss.backward()
optimizer.step()


➡️Преимущества PyTorch
💬Динамические вычислительные графы
💬Простота отладки
💬Богатая экосистема и сообщество
💬Интеграция с Python

➡️Заключение
PyTorch предоставляет мощный и гибкий инструментарий для создания и обучения нейронных сетей. С его помощью вы можете реализовать самые современные алгоритмы машинного обучения и решать сложные задачи в области искусственного интеллекта.

🐍Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
👍76🔥5
✈️Анализ текста с помощью spaCy

➡️Токенизация и лемматизация
SpaCy предоставляет эффективные инструменты для разбиения текста на токены и определения их базовых форм:

import spacy

nlp = spacy.load("ru_core_news_sm")
doc = nlp("Кошки любят спать на мягких подушках.")

for token in doc:
print(f"{token.text} -> {token.lemma_}")


➡️Определение частей речи
SpaCy автоматически определяет части речи для каждого токена:

for token in doc:
print(f"{token.text} - {token.pos_}")


➡️Распознавание именованных сущностей
Библиотека способна выделять в тексте именованные сущности, такие как имена, организации и локации:

for ent in doc.ents:
print(f"{ent.text} - {ent.label_}")


➡️Генерация текста с использованием spaCy
Хотя spaCy в первую очередь предназначен для анализа текста, его можно использовать и для помощи в генерации:

➡️Использование зависимостей для построения предложений
SpaCy определяет синтаксические зависимости между словами, что может быть использовано для создания новых предложений:

def generate_sentence(subject, verb, object):
doc = nlp(f"{subject} {verb} {object}")
return " ".join([token.text for token in doc])

print(generate_sentence("Программист", "пишет", "код"))


➡️Использование векторных представлений слов
Векторные представления слов в spaCy могут быть использованы для поиска семантически близких слов:

def find_similar_word(word, n=3):
token = nlp(word)[0]
similar_words = []
for lex in nlp.vocab:
if lex.has_vector:
if lex.is_lower == token.is_lower and lex.is_alpha:
similarity = token.similarity(lex)
similar_words.append((lex.text, similarity))
return sorted(similar_words, key=lambda x: x[1], reverse=True)[:n]

print(find_similar_word("компьютер"))


🐍Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
5👍3🔥1
Python keywords - это зарезервированные слова в языке программирования Python, которые имеют специальное значение и не могут быть использованы в качестве идентификаторов (названий переменных, функций и т.д.) в программах.

🐍Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
👍112🔥2
➡️Основные возможности GeoPandas

GeoPandas расширяет функциональность pandas, добавляя поддержку геометрических типов данных. Это позволяет эффективно работать с пространственными данными, выполнять геометрические операции и визуализировать результаты.

➡️Ключевые особенности:
💬Поддержка различных форматов геоданных (Shapefile, GeoJSON и др.)
💬Геометрические операции (пересечение, объединение, буферизация)
💬Пространственные соединения и агрегации
💬Интеграция с matplotlib для визуализации

➡️Простой пример:
import geopandas as gpd

# Чтение геоданных
gdf = gpd.read_file('path/to/your/geodata.shp')

# Базовые операции
print(gdf.head())
print(gdf.crs) # Система координат


➡️Практические примеры использования

Визуализация данных
import matplotlib.pyplot as plt

gdf.plot()
plt.title('Визуализация геоданных')
plt.show()


➡️Пространственные операции

Выполнение геометрических операций, таких как буферизация:
buffered = gdf.geometry.buffer(1)  # Создание буфера в 1 единицу


➡️Пространственные соединения

Объединение двух наборов геоданных на основе их пространственных отношений:
cities = gpd.read_file('cities.shp')
countries = gpd.read_file('countries.shp')

cities_with_countries = gpd.sjoin(cities, countries, how="inner", predicate="within")


➡️Преимущества использования GeoPandas:
💬Эффективная обработка больших объемов геоданных
💬Интеграция с экосистемой Python для анализа данных
💬Упрощение сложных геопространственных операций
💬Возможность создания высококачественных картографических визуализаций

🐍Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
3👍3🔥3
✈️Множество в Python - это неупорядоченная коллекция уникальных элементов. Представьте себе мешок с разноцветными шариками, где каждый цвет встречается только один раз. Вот это и есть множество!

➡️Создать множество очень просто:

colors = {"red", "blue", "green"}
print(colors) # Вывод: {'blue', 'green', 'red'}

Заметили, что порядок элементов изменился? Это нормально для множеств - они не сохраняют порядок.

➡️Давайте рассмотрим самые полезные методы для работы с множествами.

➡️1. add() - Добавление элемента

Метод add() позволяет добавить новый элемент в множество. Если элемент уже существует, ничего не произойдет.
fruits = {"apple", "banana", "cherry"}
fruits.add("orange")
print(fruits) # Вывод: {'apple', 'banana', 'cherry', 'orange'}
fruits.add("apple") # Ничего не изменится
print(fruits) # Вывод: {'apple', 'banana', 'cherry', 'orange'}


➡️2. remove() и discard() - Удаление элементов

Оба метода удаляют элемент из множества, но есть важное различие:
💬remove() вызовет ошибку, если элемента нет в множестве
💬discard() просто ничего не сделает, если элемента нет
numbers = {1, 2, 3, 4, 5}
numbers.remove(3)
print(numbers) # Вывод: {1, 2, 4, 5}

numbers.discard(10) # Ничего не произойдет
print(numbers) # Вывод: {1, 2, 4, 5}

numbers.remove(10) # Вызовет ошибку KeyError


➡️3. union() - Объединение множеств
Метод union() объединяет два или более множеств. Это как смешать шарики из разных мешков в один большой мешок!

set1 = {1, 2, 3}
set2 = {3, 4, 5}
set3 = set1.union(set2)
print(set3) # Вывод: {1, 2, 3, 4, 5}


➡️4. intersection() - Пересечение множеств

Этот метод находит общие элементы между множествами. Представьте, что вы ищете друзей, которые любят и пиццу, и мороженое!
pizza_lovers = {"Алиса", "Боб", "Чарли", "Дэвид"}
ice_cream_lovers = {"Боб", "Чарли", "Ева", "Фрэнк"}
pizza_and_ice_cream = pizza_lovers.intersection(ice_cream_lovers)
print(pizza_and_ice_cream) # Вывод: {'Боб', 'Чарли'}


➡️5. difference() - Разность множеств

Метод difference() возвращает элементы, которые есть в одном множестве, но отсутствуют в другом.
set1 = {1, 2, 3, 4, 5}
set2 = {4, 5, 6, 7, 8}
diff = set1.difference(set2)
print(diff) # Вывод: {1, 2, 3}


➡️6. symmetric_difference() - Симметричная разность

Этот метод возвращает элементы, которые есть в одном из множеств, но не в обоих сразу. Это как найти уникальные предпочтения в группе друзей!
group1 = {"пицца", "бургер", "суши"}
group2 = {"суши", "рамен", "пицца"}
unique_preferences = group1.symmetric_difference(group2)
print(unique_preferences) # Вывод: {'бургер', 'рамен'}


➡️Заключение
Множества в Python - это невероятно полезный инструмент для работы с уникальными элементами и выполнения различных операций над наборами данных.

🐍Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🔥93
Forwarded from IT memer
Please open Telegram to view this post
VIEW IN TELEGRAM
🤣166👍2
✈️composio-core - это мощная библиотека для Python, предназначенная для упрощения процесса композиции и декомпозиции сложных объектов. Она предоставляет элегантный и интуитивно понятный API, который позволяет разработчикам легко создавать, модифицировать и анализировать сложные структуры данных.

➡️Установка composio-core

Установить библиотеку composio-core очень просто. Вы можете использовать pip, стандартный менеджер пакетов Python. Вот команда для установки:

pip install composio-core


➡️Основные возможности
💬Гибкая система композиции объектов
💬Мощные инструменты для декомпозиции и анализа
💬Поддержка асинхронных операций
💬Интеграция с популярными фреймворками
💬Расширяемая архитектура плагинов

➡️Пример использования

Давайте рассмотрим простой пример использования composio-core для создания и анализа сложного объекта:
from composio_core import Composer, Analyzer

# Создаем композицию
composer = Composer()
complex_object = composer.create({
"name": "Проект X",
"components": [
{"type": "module", "name": "Auth", "version": "1.2.0"},
{"type": "database", "name": "UserDB", "engine": "PostgreSQL"},
{"type": "service", "name": "EmailNotifier", "protocol": "SMTP"}
]
})

# Анализируем созданный объект
analyzer = Analyzer()
analysis_result = analyzer.analyze(complex_object)

print(analysis_result.summary())
print(f"Количество компонентов: {analysis_result.component_count}")
print(f"Типы компонентов: {', '.join(analysis_result.component_types)}")

⬆️В этом примере мы создали сложный объект, представляющий структуру проекта, а затем проанализировали его с помощью инструментов composio-core.

➡️Преимущества использования composio-core

💬1. Повышение читаемости кода

Благодаря четкой структуре и интуитивно понятному API, код, использующий composio-core, становится более читаемым и понятным. Это особенно важно при работе в команде или при поддержке долгосрочных проектов.

💬2. Ускорение разработки

Библиотека предоставляет множество готовых инструментов для работы со сложными структурами данных, что значительно ускоряет процесс разработки и уменьшает количество потенциальных ошибок.

💬3. Гибкость и расширяемость

Архитектура composio-core позволяет легко расширять функциональность библиотеки с помощью плагинов, что делает ее идеальным выбором для проектов с уникальными требованиями.

➡️Продвинутые возможности

Помимо базовой функциональности, composio-core предлагает ряд продвинутых возможностей:

➡️Асинхронная композиция
import asyncio
from composio_core import AsyncComposer

async def create_complex_object():
composer = AsyncComposer()
object = await composer.create_async({
"name": "Async Project",
"components": [
{"type": "api", "name": "UserAPI", "version": "2.0.0"},
{"type": "queue", "name": "TaskQueue", "technology": "RabbitMQ"}
]
})
return object

complex_object = asyncio.run(create_complex_object())
print(complex_object)


➡️Интеграция с популярными фреймворками

composio-core легко интегрируется с популярными Python-фреймворками, такими как Django и Flask. Например, вот как можно использовать библиотеку в Django-проекте:
from django.views import View
from django.http import JsonResponse
from composio_core import Composer

class ProjectView(View):
def post(self, request):
composer = Composer()
project = composer.create(request.POST)
return JsonResponse({"project": project.to_dict()})


➡️Заключение

Библиотека composio-core представляет собой мощный и гибкий инструмент для работы со сложными структурами данных в Python.

Независимо от того, разрабатываете ли вы веб-приложение, систему анализа данных или инструмент для машинного обучения, composio-core может значительно упростить процесс работы с комплексными объектами и структурами данных.

🐍Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
5👍2🔥1
✈️Typer — это библиотека для создания командных интерфейсов приложений на Python.
Она позволяет легко создавать CLI приложения с поддержкой аргументов, опций, субкоманд и автоматической генерацией help.


➡️Основные возможности Typer:
💬Декоратор @typer.command() для определения команд и подкоманд.
💬Автоматический парсинг аргументов и опций.
💬Валидация и tipped annotations для аргументов и опций.
💬Автоматическая генерация help с описаниями.
💬Встроенная поддержка Click для обратной совместимости.

➡️Пример:
import typer

app = typer.Typer()

@app.command()
def hello(name: str):
# Приветствие пользователя
print(f"Hello {name}")

@app.command()
def goodbye(name: str, formal: bool = False):
# Прощание с пользователем
if formal:
print(f"Goodbye Ms./Mr. {name}. Have a good day.")
else:
print(f"Bye {name}!")

if __name__ == "__main__":
app()


🔎Typer часто используется для создания утилит командной строки, CLI интерфейсов для python приложений, API клиентов, DevOps инструментов и других задач, где нужен простой и удобный интерфейс командной строки.

🐍Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
3👍3🔥2