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

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

Канал на бирже: https://telega.in/c/pythonercode
Download Telegram
✈️При вызове скрипта Python можно указать различные параметры/флаги для большей гибкости. Вот наиболее часто используемые варианты:

* -h или --help: Выводит справку по доступным флагам.

* -V или --version: Выводит номер версии Python.

* -m <module>: Запускает модуль как скрипт (например, python -m venv venv).

* -c <command>: Выполняет указанную команду Python (например, python -c "print('Hello, World!')").

* -i: Включает интерактивный режим REPL после выполнения скрипта.

* -O: Включает оптимизацию байт-кода (удаляет операторы assert и любой код, зависящий от значения __debug__).

* -OO: Более агрессивная оптимизация, удаляющая docstrings.

* -B: Отключает создание файлов .pyc (с компилированным байт-кодом).

* -W: Контролировать частоту вывода предупреждений.

💡Это лишь некоторые из наиболее распространенных флагов.
🔗 подробнее

🐍Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
4👍3🔥1👌1
✈️Модуль string в Python предоставляет ряд полезных констант, которые помогают работать со строками более эффективно и удобно.

➡️Основной список:
1. string.ascii_letters: Содержит все буквы английского алфавита (как заглавные, так и строчные).
2. string.digits: Включает все десятичные цифры от 0 до 9.
3. string.hexdigits: Содержит шестнадцатеричные цифры (0-9 и a-f, A-F).
4. string.octdigits: Включает восьмеричные цифры (0-7).
5. string.punctuation: Содержит все знаки пунктуации.
6. string.whitespace: Включает все пробельные символы (пробелы, табуляции и переносы строк).

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

# Функция проверяет, состоит ли строка только из букв
def is_alpha(s):
return all(char in string.ascii_letters for char in s)

# Тестируем функцию
print(is_alpha("HelloWorld")) # Вывод: True
print(is_alpha("Hello World!")) # Вывод: False


💡Заключение
Константы из модуля string значительно упрощают обработку строк и могут быть использованы в различных алгоритмах, таких как валидация ввода, фильтрация символов и т.д.

🐍Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
👍83🔥2
✈️Одним из основных преимуществ Pendulum является возможность легко создавать и форматировать даты. Давайте рассмотрим пример:
import pendulum

# Создание даты
date = pendulum.datetime(2023, 10, 5)

# Форматирование даты
formatted_date = date.format('YYYY-MM-DD')
print(formatted_date) # Вывод: 2023-10-05


⬆️С помощью Pendulum вы можете легко создавать даты и форматировать их в нужный формат с помощью метода format.

➡️Работа с временными зонами

Pendulum значительно упрощает работу с временными зонами. Пример создания даты в одной временной зоне и её преобразования в другую:
# Создание даты в временной зоне 'Europe/Moscow'
moscow_time = pendulum.datetime(2023, 10, 5, tz='Europe/Moscow')
print(moscow_time) # Вывод: 2023-10-05T00:00:00+03:00

# Преобразование в другую временную зону
ny_time = moscow_time.in_timezone('America/New_York')
print(ny_time) # Вывод: 2023-10-04T17:00:00-04:00


⬆️С Pendulum работа с временными зонами становится интуитивно понятной и простой!

➡️Различные операции с датами

Pendulum предоставляет широкий набор методов для выполнения различных операций с датами. Пример добавления и вычитания временных интервалов:
# Создание даты
date = pendulum.datetime(2023, 10, 5)

# Добавление 5 дней
new_date = date.add(days=5)
print(new_date) # Вывод: 2023-10-10T00:00:00+00:00

# Вычитание 2 часов
new_date = date.subtract(hours=2)
print(new_date) # Вывод: 2023-10-04T22:00:00+00:00


⬆️С методами add и subtract вы можете легко выполнять арифметические операции с датами, что делает работу с временными интервалами очень удобной.

🐍Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
👍53🔥3
✈️git merge объединяет две ветки, создавая новый коммит, который объединяет изменения из обеих веток.
Это означает, что вся история обеих веток сохраняется, и создается так называемый "слияние" (merge commit).

✈️git rebase позволяет переназначить (переписать) коммиты из одной ветки на другую.
Это создаёт новое основание для вашей ветки и делает историю более линейной, очищая её от избыточных merge-коммитов.

🐍Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🔥32
✈️Байтовые объекты представляют собой последовательность байтов, которая хранит информацию в двоичном формате.

➡️В Python байтовые объекты представлены типами данных bytes и bytearray. Различие заключается в том, что bytes является неизменяемым типом данных, в то время как bytearray - изменяемым.

Также в Python имеется тип данных memoryview, предоставляющий доступ к внутренним данным объекта, который поддерживает буферный протокол, без копирования.

Для создания байтовых объектов можно использовать байтовые литералы (синтаксис схож со строковыми литералами, за исключением того, что добавляется префикс "b").

➡️В Python также существует модуль struct, который позволяет работать с байтовыми данными на низком уровне, осуществляя их упаковку и распаковку.

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

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

➡️Комбинации с примерами и краткими описаниями:

1. Распаковка в несколько переменных:
a, b, c = 1, 2, 3
# a = 1, b = 2, c = 3


➡️Присваивание значений из кортежа переменным.

2. Распаковка посимвольно в строки:
a, b = "12"
# a = '1', b = '2'


➡️Разделение строки на отдельные символы и присваивание их переменным.

3. Распаковка с использованием звёздочки (*):
a, *b = 1, 2, 3
# a = 1, b = [2, 3]


➡️Сбор оставшихся значений в список с использованием звёздочки.

4. Распаковка в переменную со звёздочкой (*):
a, *b, c = 1, 2, 3, 4
# a = 1, b = [2, 3], c = 4


➡️Присваивание первого и последнего значения, а остаток помещается в список.

5. Игнорирование значений при распаковке:
a, _, b = 7, 8, 9
# a = 7, b = 9 (значение 8 игнорируется)


Пропуск значений, которые не нужны при присвоении.

➡️Различные итерируемые объекты:
Можно использовать любые итерируемые объекты, такие как списки, кортежи, строки, объекты, поддерживающие итерацию и даже функция range():

- Список:
a, b, c = [4, 5, 6]
# a = 4, b = 5, c = 6


- Кортеж:
x, y = (10, 20)
# x = 10, y = 20


- Строка:
char1, char2, char3 = "xyz"
# char1 = 'x', char2 = 'y', char3 = 'z'


- Использование range():
a, b, c = range(1, 4)
# a = 1, b = 2, c = 3


💡Заключение:
Распаковка значений в Python - удобный и эффективный способ присваивания значений переменным из итерируемых объектов, делая код более читаемым и компактным. Это дает гибкость при работе с данными различных типов и структур.

🐍Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
👍741🔥1
✈️OnnxOCR — это проект для распознавания текста с использованием ONNX Runtime, предлагающий эффективную модель без тяжелых фреймворков.

✈️Его главные плюсы — это портативность и скорость работы благодаря оптимизированным нейросетевым весам.

💡Отличное решение для встраивания в ваши Python-скрипты для обработки изображений там, где не нужны монструозные библиотеки.

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

🐍Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
👍52🔥2
✈️В asyncio есть два способа запустить корутину:

- await — ждёт, пока задача завершится.

- loop.create_task() — запускает задачу в фоне, не блокируя выполнение остального кода.

➡️Если ты используешь await, выполнение кода останавливается, пока корутина не закончится. А вот create_task() добавляет её в event loop — и она работает параллельно с другими задачами.

➡️Пример:
import asyncio

async def task(name):
print(f"Начал {name}")
await asyncio.sleep(2)
print(f"Закончил {name}")

async def main():
t1 = asyncio.create_task(task("Задача 1"))
t2 = asyncio.create_task(task("Задача 2"))
print("Обе задачи запущены!")
await t1
await t2

asyncio.run(main())

обе задачи выполняются одновременно, а не по очереди.

💡Это важно, если ты пишешь сетевые приложения, обрабатываешь запросы или работаешь с I/O — именно create_task() делает Python по-настоящему асинхронным.

🐍Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
👍103🤣3🔥1
✈️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👌1
Что выдаст код выше
Anonymous Quiz
6%
[2, 3, 4, 1]
23%
[1, 2, 3, 4]
5%
[1, 4, 3, 2]
65%
[4, 3, 2, 1]
4👍3🤔2🤓2👀2🤯1
🤔Разбор

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


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

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

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

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

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

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

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

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

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

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

🐍Pythoner
Please open Telegram to view this post
VIEW IN TELEGRAM
👍52🔥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
👍5🔥42