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

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

Канал на бирже: https://telega.in/c/pythonercode
Download Telegram
✈️Aiopandas — это легковесный патч для Pandas, который добавляет асинхронную поддержку для популярных методов обработки данных.

➡️Библиотека не блокирует event loop при операциях ввода-вывода и позволяет параллельно обрабатывать несколько DataFrame, что особенно полезно для веб-приложений на FastAPI или aiohttp.

💡Идеально для проектов, где нужно совмещать анализ данных с асинхронными операциями: работа с LLM-моделями, веб-скрапинг или асинхронное взаимодействие с базами данных.

Документация

🐍Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
👍53🔥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
👍6🔥43
✈️PyMuPDF — это мощная и невероятно быстрая библиотека для работы с PDF-документами прямо из Python.

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

💡Идеально для автоматизации массовой обработки сканированных документов или отчетов — быстро извлекайте нужные данные без рутинных операций.

Документация

🐍Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
👍74🔥2
👍4👌1
Что выдаст код выше
Anonymous Quiz
7%
[2, 3, 4, 1]
23%
[1, 2, 3, 4]
6%
[1, 4, 3, 2]
64%
[4, 3, 2, 1]
4👍2🤔2🤓2👀2🤯1
🤔Разбор

Срез x[::-1] инвертирует список, Применение его трижды возвращает исходный порядок.


🐍 Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
4👍3🔥2
➡️Функция all в Python
Функция all принимает на вход итерируемый объект (например, список) и возвращает True, если все его элементы являются истинными (или, если итерируемый объект пустой). Например:
numbers = [1, 2, 3, 4]
print(all(numbers)) # Выводит: True


⬆️В этом примере функция all вернула True, потому что все числа в списке numbers являются истинными (то есть, не равны нулю).

➡️Функция any в Python
Функция any, как и all, принимает на вход итерируемый объект, но возвращает True, если хоть один из его элементов является истинным. Если итерируемый объект пустой, функция any возвращает False. Например:
numbers = [0, 0, 1, 0]
print(any(numbers)) # Выводит: True


⬆️В этом случае функция any вернула True, потому что в списке numbers было хотя бы одно истинное значение (1).

➡️Использование all и any вместе
Функции all и any можно использовать вместе, чтобы проверить сложные условия. Например, мы можем проверить, все ли элементы в списке положительные и есть ли среди них хоть одно четное число:
numbers = [1, 2, 3, 4]
print(all(num > 0 for num in numbers) and any(num % 2 == 0 for num in numbers)) # Выводит: True


⬆️В этом примере функция all вернет True, если все числа в списке будут положительными, а функция any вернет True, если среди чисел будет хотя бы одно четное.

🐍 Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
👍73🔥3
✈️Конструкция raise используется для генерации исключений. Когда в коде происходит что-то непредвиденное или некорректное — можно сгенерировать исключение командой raise.

➡️Основные моменты конструкции raise:
—Возбуждение существующих исключений: Вы можете использовать raise без каких-либо параметров в блоке except, чтобы повторно вызвать текущее исключение.
—Создание собственных исключений: Вы можете создать или вызвать собственное исключение, создав объект исключения и передав его в raise.

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

def divide(a, b):
if b == 0:
raise ValueError("Деление на ноль невозможно.")
return a / b

try:
result = divide(10, 0)
except ValueError as e:
print(f"Ошибка: {e}")

⬆️В этом примере функция divide вызывает исключение ValueError, если второй аргумент равен нулю. В блоке try мы пытаемся выполнить деление, и если возникает ошибка, мы перехватываем её и выводим сообщение об ошибке.

🐍Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
6👍4🔥3
✈️В мире разработки программного обеспечения постоянно появляются новые тренды и подходы. Одним из таких трендов, набирающих популярность в последние годы, является функциональное программирование (ФП). Давайте разберемся, почему это происходит!

➡️Что такое функциональное программирование?
Функциональное программирование - это парадигма, в которой процесс вычисления рассматривается как вычисление математических функций. Основная идея заключается в том, чтобы избегать изменяемого состояния и мутаций данных.

➡️Почему ФП становится популярнее?
💬Упрощение параллельного программирования: Отсутствие побочных эффектов делает код более предсказуемым и легким для распараллеливания.
💬Меньше багов: Неизменяемость данных и чистые функции снижают вероятность ошибок, связанных с состоянием программы.
💬Более читаемый код: ФП поощряет написание небольших, специализированных функций, что улучшает читаемость и поддерживаемость кода.
💬Легкость тестирования: Чистые функции легче тестировать, так как их поведение зависит только от входных данных.
💬Производительность: Некоторые функциональные концепции, такие как ленивые вычисления, могут повысить производительность программ.

➡️Заключение
Функциональное программирование становится все популярнее благодаря своим преимуществам в читаемости, тестируемости и параллельном выполнении. Хотя оно может потребовать некоторого времени для освоения, инвестиции в изучение ФП могут значительно улучшить качество вашего кода и эффективность разработки.

🐍Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
👍52🔥1
✈️Зачем вообще париться с памятью в Python?

Казалось бы, Python — язык высокого уровня с автоматическим управлением памятью. Зачем нам вообще беспокоиться об этом? Но, друзья мои, даже в Пайтоне память не бесконечна. Особенно когда вы работаете с большими данными или создаете высоконагруженные приложения.

➡️memory_profiler: ваш верный спутник

memory_profiler — это как швейцарский нож для анализа памяти. Вот пример его использования:
from memory_profiler import profile

@profile
def my_func():
a = [1] * (10 ** 6)
b = [2] * (2 * 10 ** 7)
del b
return a

if __name__ == '__main__':
my_func()


⬆️Запустите скрипт с помощью python -m memory_profiler script.py, и вы увидите подробный отчет о использовании памяти. Красота, правда?

➡️line_profiler: когда нужна точность до строчки

Если memory_profiler — это швейцарский нож, то line_profiler — это микроскоп. Он покажет вам использование памяти построчно:
@profile
def my_func():
a = [1] * (10 ** 6)
b = [2] * (2 * 10 ** 7)
del b
return a

my_func()


⬆️Запустите с помощью kernprof -l -v script.py, и вы увидите, какая строчка сколько памяти съедает.

➡️objgraph: визуализируем объекты

objgraph — это как рентген для вашего кода. Он позволяет визуализировать объекты в памяти:
import objgraph

x = []
y = [x, [x], dict(x=x)]
objgraph.show_refs([y], filename='sample-graph.png')


⬆️Запустите это, и вы получите красивую картинку связей между объектами. Полезно для поиска утечек памяти!

➡️tracemalloc: встроенная мощь Python

А теперь — жемчужина в короне Python 3. tracemalloc — это встроенный модуль для отслеживания выделения памяти:
import tracemalloc

tracemalloc.start()

# ваш код здесь

snapshot = tracemalloc.take_snapshot()
top_stats = snapshot.statistics('lineno')

print("[ Топ 10 ]")
for stat in top_stats[:10]:
print(stat)


⬆️Это как рентген, МРТ и УЗИ в одном флаконе. Вы увидите, где именно происходят утечки памяти.

🐍Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🔥21
✈️OpenAI Gym - это библиотека Python, которая предоставляет набор виртуальных сред для обучения агентов искусственного интеллекта. Среды Gym представляют собой упрощенные модели реальных задач, таких как игра в гольф, вождение автомобиля или управление роботом.

🔎Библиотека Gym может использоваться для:

➡️Для обучения агентов искусственного интеллекта, таких как нейронные сети и генетические алгоритмы.

➡️Для исследования искусственного интеллекта, например, для разработки новых алгоритмов обучения агентов.

➡️Для визуализации действий агентов искусственного интеллекта.

➡️OpenAI Gym предоставляет простой и интуитивно понятный интерфейс для взаимодействия с средами. Разработчики могут создавать агентов, определять действия, наблюдать состояния и получать обратную связь. Он также предлагает мощные инструменты для оценки и сравнения алгоритмов машинного обучения, позволяя разработчикам точно измерять производительность своих моделей.

🐍Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
👍42🔥1
💬HTTP GET
Этот метод извлекает ресурс с сервера. Он идемпотентен: несколько идентичных запросов возвращают один и тот же результат.

💬HTTP PUT
Этот метод обновляет или создает ресурс. Он также идемпотентен: несколько идентичных запросов обновят один и тот же ресурс.

💬HTTP POST
Этот метод используется для создания новых ресурсов. Он не идемпотентен: два одинаковых POST-запроса создадут дублированные ресурсы.

💬HTTP DELETE
Этот метод используется для удаления ресурса. Он идемпотентен: несколько идентичных запросов удалят один и тот же ресурс.

💬HTTP PATCH
Метод PATCH применяется для частичного изменения ресурса.

💬HTTP HEAD
Метод HEAD запрашивает ответ, идентичный GET-запросу, но без тела ответа.

💬HTTP CONNECT
Метод CONNECT устанавливает туннель к серверу, идентифицированному целевым ресурсом.

💬HTTP OPTIONS
Этот метод описывает параметры связи для целевого ресурса.

💬HTTP TRACE
Этот метод выполняет тест возврата сообщения по пути к целевому ресурсу.

👀Так же прикрепляю фото без сжатия если будет плохо видно на основном фото

🐍Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🔥32
✈️Скачивание файла с помощью requests довольно прямолинейно. Вам просто нужно сделать запрос к URL-адресу файла, который вы хотите скачать, а затем записать ответ в файл. Вот пример кода, который скачивает изображение с интернета:
import requests
url = '<https://example.com/image.jpg>'
response = requests.get(url)
with open('image.jpg', 'wb') as f:
f.write(response.content)


➡️Работа с ошибками

Важно обрабатывать возможные ошибки при скачивании файла. Если файл не найден или произошла другая ошибка, requests вернет код ответа, отличный от 200. В этом случае вы должны проверять статус ответа перед записью файла.

➡️Вот пример кода, который скачивает реальный pdf файл с сайта:
import requests

headers = {'referer': 'https://nottka.com/4364-yoshinao-nakada-etude-allegro.html'}
response = requests.get('https://nottka.com/index.php?do=download&id=4420', headers=headers)
with open('4420.pdf', 'wb') as file:
file.write(response.content)


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

Преимущества:
💬Простота разработки и развертывания
💬Легкость в отладке и тестировании
💬Высокая производительность из-за отсутствия сетевых задержек между компонентами

Недостатки:
💬Сложность масштабирования отдельных компонентов
💬Затруднительное внедрение новых технологий
💬Риск "снежного кома" при росте сложности проекта

➡️Микросервисная архитектура

Микросервисная архитектура разбивает приложение на набор небольших, независимых сервисов, каждый из которых отвечает за конкретную бизнес-функцию.

Преимущества:
💬Гибкость в выборе технологий для каждого сервиса
💬Легкость масштабирования отдельных компонентов
💬Возможность независимой разработки и развертывания сервисов

Недостатки:
💬Сложность в управлении и оркестрации множества сервисов
💬Повышенные требования к инфраструктуре
💬Потенциальные проблемы с производительностью из-за сетевых взаимодействий

🔎Что выбрать для вашего проекта?

Выбор архитектуры зависит от нескольких факторов:

➡️Выбирайте монолитную архитектуру, если:
💬У вас небольшой проект или стартап
💬Вам нужно быстро вывести продукт на рынок
💬У вас ограниченные ресурсы для разработки и поддержки

➡️Выбирайте микросервисную архитектуру, если:
💬У вас крупный проект с множеством функций
💬Вам нужна высокая масштабируемость и гибкость
💬У вас есть ресурсы для управления сложной инфраструктурой

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

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

🐍Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
👍54🔥1
✈️Что такое итерируемый счетчик?
Итерируемый счетчик в Python - это объект, который можно использовать в цикле for и других итерационных контекстах. Он позволяет последовательно получать значения, обычно числовые, в заданном диапазоне или по определенному правилу.

➡️Реализация итерируемого счетчика
Давайте рассмотрим пример реализации простого итерируемого счетчика:
class IterableCounter:
def __init__(self, start, end):
self.current = start
self.end = end

def __iter__(self):
return self

def __next__(self):
if self.current > self.end:
raise StopIteration
else:
self.current += 1
return self.current - 1


В этом примере:
💬init инициализирует счетчик начальным и конечным значениями.
💬iter возвращает сам объект, делая его итератором.
💬next определяет логику получения следующего значения.

➡️Использование итерируемого счетчика
Теперь мы можем использовать наш счетчик в цикле for:
counter = IterableCounter(1, 5)
for num in counter:
print(num)


⬆️Этот код выведет числа от 1 до 5.

➡️Преимущества итерируемого счетчика

💬Гибкость: можно легко изменить логику генерации значений.
💬Экономия памяти: значения генерируются по мере необходимости.
💬Интеграция с циклами: легко использовать в стандартных конструкциях Python.

➡️Альтернативы

В Python есть встроенные альтернативы для простых случаев:
💬range(): для последовательностей целых чисел.
💬enumerate(): для нумерации элементов итерируемого объекта.

💡Заключение

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

🐍Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
👍52🔥1
✈️Тернарный оператор — это оператор, позволяющий записать условную конструкцию if-else в одну строку.

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

➡️Простой пример:
a = 3
b = 10

print('a больше b') if a > b else print('a меньше b')

result = 'Четное' if a % 2 == 0 else 'Нечетное'
print(result)

# Результат:
# a меньше b
# Нечетное


⬆️В данном примере тернарный оператор используется:
—Для вывода одной из двух фраз в зависимости от условия a > b.
—Для присваивания переменной result одного из двух значений в зависимости от четности a.

🐍Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
👍61🔥1
✈️Анализ текста с помощью 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
2👍2🔥2