Python Academy
43.9K subscribers
1.6K photos
2 videos
499 links
Python Academy — один канал вместо тысячи учебников

Чат канала: @python_academy_chat

Сотрудничество: @zubar89

Канал включён в перечень РКН: https://rkn.link/TVu
Download Telegram
Параллельное Исполнение в Python с Помощью Модуля threading

В данном посте, вы узнаете, как использовать модуль threading для создания параллельных потоков выполнения и улучшения производительности ваших приложений.

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

Пример:

import threading
import time

# Функция, которую будем выполнять в параллельных потоках
def print_numbers():
for i in range(5):
time.sleep(1) # Эмулируем длительную операцию
print(f"Thread {threading.current_thread().name}: {i}")

# Создаем два потока
thread1 = threading.Thread(target=print_numbers, name="Thread 1")
thread2 = threading.Thread(target=print_numbers, name="Thread 2")

# Запускаем потоки
thread1.start()
thread2.start()

# Ожидаем завершения потоков перед завершением программы
thread1.join()
thread2.join()

print("Главный поток выполнения завершен.")


В данном примере создаются два потока, каждый из которых выполняет функцию print_numbers, эмулируя длительную операцию с использованием time.sleep. Запуск потоков осуществляется с помощью метода start(), и главный поток ожидает их завершения с использованием метода join().

Модуль threading предоставляет удобные средства для работы с параллельными потоками в Python, что позволяет улучшить производительность приложений. Однако, следует быть внимательными при работе с потоками из-за потенциальных проблем с блокировками и синхронизацией данных. Попробуйте интегрировать threading в свой код и ускорьте выполнение задач! 💻

#python #threading
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5❤2👎1😱1
Скачиваем видео с YouTube

Пакет pytube предоставляет всю небходимую функциональность для скачивания видео с YouTube, а также для сбора всей информации о нем.

Для работы нам необходимо создать объект класса YouTube. Помимо ссылки на видео в конструктор можно передать в качестве параметров функции для обработки прогресса загрузки и завершения.

Большинство видео на ютубе не имеют аудиодорожки на потоках с высоким разрешением, свыше 720p — это связано с технологией передачи DASH, которую использует YouTube.

На картинке мы показали как отфильтровать потоки с прогрессивной передачей и выбрать из полученного списка с максимальным доступным разрешением до 720p.

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

#python #youtube
👍4👎2❤1
PyJWT: Работаем с JSON Web Tokens в Python

PyJWT — это библиотека Python, предназначенная для кодирования, декодирования и проверки подлинности JSON Web Tokens (JWT).

JWT — это открытый стандарт (RFC 7519), который определяет компактный и независимый способ безопасной передачи информации между сторонами в виде JSON-объекта. Эта информация может быть проверена и доверена, так как она подписана цифровой подписью.

В этом примере мы создаём JWT, который содержит идентификатор пользователя и срок его действия. Затем мы декодируем и проверяем токен, чтобы убедиться, что он ещё действителен и подлинен.

#python #pyjwt
❤6👎1
Понимание различий между операторами сравнения == и is

Множество разработчиков сталкиваются с трудностями в отличии двух операторов сравнения: == и is, что может привести к неожиданным ошибкам в коде.

Оператор == сравнивает значения двух объектов, чтобы определить их равенство. В отличие от него, оператор is проверяет, ссылаются ли две переменные на один и тот же объект в памяти, тем самым проверяя их идентичность.

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

#python
❤4👎1
Получение срезов итераторов

Если вы попытаетесь получить срез итератора, то столкнётесь с ошибкой TypeError, сообщающей о том, что на объект-генератор нельзя оформить подписку. Однако эта проблема поддаётся решению (см картинку).

Воспользовавшись методом itertools.islice, можно создать объект islice, который представляет собой итератор, выдающий нужные элементы. Однако здесь важно отметить то, что эта конструкция использует все элементы генератора вплоть до начала среза и все элементы в объекте islice.

#python
❤3👎2
Возврат нескольких значений из функции

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

#python
👎5❤2
Знакомство с библиотекой NumPy в Python

Что такое
NumPy?
NumPy (Numerical Python) - это популярная библиотека для вычислительных операций с многомерными массивами и матрицами, а также для выполнения высокоуровневых математических функций. Она предоставляет эффективные инструменты для работы с большими объемами данных и позволяет выполнять различные операции, такие как суммирование, умножение, индексацию и многое другое, без необходимости явно создавать циклы.

Преимущества NumPy:
- Производительность: NumPy выполняет операции над массивами быстрее, чем стандартные структуры данных Python.
- Удобство: NumPy предоставляет удобные методы для работы с данными, такие как срезы, индексация и броадкастинг.
- Интеграция: Библиотека интегрируется легко с другими библиотеками, такими как SciPy, pandas и Matplotlib, что делает ее мощным инструментом для научных вычислений.

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

import numpy as np

# Создаем одномерный массив
arr = np.array([1, 2, 3, 4, 5])

# Выполняем операции над массивом
arr_squared = arr ** 2
arr_sum = np.sum(arr)

print("Исходный массив:", arr)
print("Квадраты элементов:", arr_squared)
print("Сумма элементов:", arr_sum)

NumPy также предоставляет функции для работы с многомерными массивами, линейной алгеброй, случайными числами и многое другое.

#python #NumPy #научныевычисления #анализданных
👍4👎1
Работаем с атрибутами объектов

Помимо привычного обращения к атрибутам объектов через точку, в Python есть 4 специальных функции: getattr, setattr, delattr и hasattr.

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

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

На практике использование подобного — довольно редкий случай, но иногда может сильно выручить, так что берите на вооружение.

#python #tips
👍5👎2
Разница между генераторными выражениями и генераторами коллекций

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

Распечатав переменные, можно заметить, что значением переменной a является список, а переменная x хранит в себе объект генератора. И здесь возникает вопрос, что же использовать.

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

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

#python
👍4👎1
Настройка ширины текста с использованием модуля textwrap

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

Приведем пример использования:
import textwrap

# Исходный текст
original_text = "Мощные функции модуля textwrap обеспечивают красивое форматирование текста, а функция fill позволяет задать ширину текста в символах."

# Задаем ширину текста в 30 символов
width = 30

# Применяем функцию fill для форматирования текста
formatted_text = textwrap.fill(original_text, width)

print(formatted_text)


Результат выполнения кода будет следующим:
Мощные функции модуля
textwrap обеспечивают
красивое форматирование
текста, а функция fill
позволяет задать ширину
текста в символах.


Как видно из примера, слова переносятся на новые строки, при этом ничего не обрывается на полуслове. Это обеспечивает читабельность и красивый внешний вид текста при заданной ширине.

#python #textwrap
👍6👎1
Ruff

Ruff — Чрезвычайно быстрый линтер и форматер кода на Python, написанный на Rust.

Основным преимуществом Ruff является его скорость. Ruff в 10-100 раз быстрее аналогов. В сравнении с flake8, автор заявляет о практически полном совпадении с набором правил инструмента и нативной реализацией популярных плагинов (flake8-bugbear и т.д.). Также Ruff совместим с Black «из коробки».

Ruff может форматировать код. Например, он автоматически удаляет неиспользуемые импорты. Что касается сортировки и группировки строк импорта, то она практически идентична isort.

#python #ruff
❤2👍2👎1