Kodduu Python
1.06K subscribers
317 photos
28 videos
191 links
Научись программировать на Python на интересных примерах

Самый быстрый курс https://stepik.org/a/187914
Самый нескучный курс https://stepik.org/a/185238

Во вопросам сотрудничества: @AlexErf
Download Telegram
📸 Обработка изображений с помощью OpenCV


import cv2
import numpy as np

def apply_grayscale_and_edges(image_path: str):
# Загрузка изображения
image = cv2.imread(image_path)
if image is None:
raise FileNotFoundError(f"Не удалось загрузить изображение: {image_path}")

# Преобразование в градации серого
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# Обнаружение границ с помощью Canny
edges = cv2.Canny(gray_image, 100, 200)

# Отображение результатов
cv2.imshow("Grayscale", gray_image)
cv2.imshow("Edges", edges)
cv2.waitKey(0)
cv2.destroyAllWindows()

# Пример использования
image_path = "example.jpg"
try:
apply_grayscale_and_edges(image_path)
except FileNotFoundError as e:
print(e)


📌 Этот код демонстрирует работу с изображениями с помощью OpenCV: загрузка, преобразование в градации серого и обнаружение границ. Эти операции полезны для задач компьютерного зрения, таких как распознавание объектов или улучшение изображений для анализа.

🛠 Установите OpenCV с помощью: pip install opencv-python-headless

🔍 Применяйте этот код в своих проектах для обработки изображений.

Подпишись 👉🏻 @KodduuPython 🤖
🔍 Эффективность использования Generators vs. List Comprehensions в Python


def list_comprehension_example(n: int):
return

def generator_example(n: int):
return (x * x for x in range(n))

# Пример использования
if __name__ == "__main__":
n = 10**6

# Использование спискового включения
squares_list = list_comprehension_example(n)
print(f"Сгенерирован список квадратов длиной {len(squares_list)}")

# Использование генератора
squares_generator = generator_example(n)
print("Сгенерирован генератор квадратов")

# Пример итерации по генератору
sum_of_squares = sum(squares_generator)
print(f"Сумма квадратов до {n}: {sum_of_squares}")


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

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

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

Подпишись 👉🏻 @KodduuPython 🤖
👍1
🔄 Асинхронное программирование vs. многопоточность в Python


import asyncio
import concurrent.futures
import requests

async def fetch_url_async(url: str) -> str:
loop = asyncio.get_event_loop()
with concurrent.futures.ThreadPoolExecutor() as pool:
response = await loop.run_in_executor(pool, requests.get, url)
return response.text

def fetch_url_sync(url: str) -> str:
response = requests.get(url)
return response.text

async def main():
url = "https://www.example.com"

# Асинхронный вызов
async_result = await fetch_url_async(url)
print("Асинхронный результат получен")

# Синхронный вызов
with concurrent.futures.ThreadPoolExecutor() as executor:
future = executor.submit(fetch_url_sync, url)
sync_result = future.result()
print("Синхронный результат получен")

if __name__ == "__main__":
asyncio.run(main())


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

Асинхронная функция fetch_url_async использует asyncio и ThreadPoolExecutor для выполнения запросов без блокировки основного потока,
в то время как синхронная функция fetch_url_sync выполняет их в отдельном потоке.

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

Подпишись 👉🏻 @KodduuPython 🤖