ar
Feedback
NeuroCatalog | Каталог Нейросетей Нейросети | Midjourney | Промты | AI | Prompts | OpenAi | ChatGPT | Искусственный Интеллект

NeuroCatalog | Каталог Нейросетей Нейросети | Midjourney | Промты | AI | Prompts | OpenAi | ChatGPT | Искусственный Интеллект

الذهاب إلى القناة على Telegram

Последние тренды в нейросетях и ИИ.

إظهار المزيد
6 820
المشتركون
لا توجد بيانات24 ساعات
-47 أيام
-14230 أيام

جاري تحميل البيانات...

القنوات المماثلة
لا توجد بيانات
هل تواجه مشاكل؟ يرجى تحديث الصفحة أو الاتصال بمدير الدعم الخاص بنا.
سحابة العلامات
لا توجد بيانات
هل تواجه مشاكل؟ يرجى تحديث الصفحة أو الاتصال بمدير الدعم الخاص بنا.
الإشارات الواردة والصادرة
---
---
---
---
---
---
جذب المشتركين
أبريل '25
أبريل '250
في 0 قنوات
مارس '25
+4
في 0 قنوات
Get PRO
فبراير '25
+1
في 0 قنوات
Get PRO
يناير '250
في 1 قنوات
Get PRO
ديسمبر '24
+1
في 1 قنوات
Get PRO
نوفمبر '240
في 0 قنوات
Get PRO
أكتوبر '24
+1
في 0 قنوات
Get PRO
سبتمبر '240
في 0 قنوات
Get PRO
أغسطس '240
في 1 قنوات
Get PRO
يوليو '24
+13 591
في 0 قنوات
Get PRO
يونيو '24
+4 379
في 0 قنوات
Get PRO
مايو '24
+3 183
في 0 قنوات
Get PRO
أبريل '24
+1 034
في 1 قنوات
Get PRO
مارس '24
+23 152
في 221 قنوات
التاريخ
نمو المشتركين
الإشارات
القنوات
01 أبريل0
منشورات القناة
Как ускорить вычисления в Python с помощью multiprocessing.Pool Когда речь заходит о ресурсоемких задачах, которые нагружают ваш CPU, стоит обратить внимание на библиотеку multiprocessing, а именно на класс Pool. Он позволяет задействовать все доступные ядра процессора, автоматически распределяя задачи между ними. Вот простой пример:

import math
from multiprocessing import Pool

# Генерируем список входных данных
inputs = [i ** 2 for i in range(100, 130)]

# Функция для вычислений
def f(x):
    return len(str(math.factorial(x)))

# Последовательное выполнение
%timeit [f(x) for x in inputs]
# Результат: ~1.44 сек

# Параллельное выполнение
p = Pool(4)  # Создаем пул из 4 процессов
%timeit p.map(f, inputs)
# Результат: ~451 мс
👉

2
Пагинация — это стандартная задача, с которой ежедневно сталкиваются тысячи разработчиков. Если вы используете реляционную базу данных, то можно задать смещение через LIMIT, например: SELECT * FROM table LIMIT 1001, 100; Этот запрос действительно вернет 100 записей, с 1001-й по 1100-ю. Но проблема в том, что для базы данных это так же сложно, как и выборка всех первых 1001 записей. Чем дальше запрашиваемая страница, тем медленнее будет выполняться запрос. Более оптимальным решением является использование фильтрации через WHERE, где клиент передает идентификатор последней записи текущей страницы ($last_seen_id в примере): SELECT * FROM table WHERE id > $last_seen_id ORDER BY id ASC LIMIT 100; Этот подход позволяет избежать сканирования всех предыдущих строк, что значительно ускоряет работу с большими объемами данных. Если хотите разобраться подробнее, рекомендую почитать отличную статью на эту тему! 👉
4
3
Если вы пишете много Python-кода, наверняка сталкивались с типичной задачей: определение класса с простым конструктором и базовыми методами вроде __repr__. Например: class Server: def __init__(self, ip, version=4): self.ip = ip self._version = version def __repr__(self): return '{klass}("{ip}", {version})'.format( klass=type(self).__name__, ip=self.ip, version=self._version, ) Это выглядит однообразно, но легко автоматизируется. Популярный пакет attrs позволяет избавиться от такого шаблонного кода: from attrs import define, field class Server: ip = field() _version = field(default=4) server = Server(ip='192.168.0.0.1', version=4) Пакет attrs генерирует конструктор, метод __repr__, а также методы сравнения (__eq__, __lt__, и т.д.) — всё это минимальными усилиями. Однако с появлением Python 3.7 разработчики получили встроенное решение для этой задачи — data classes. Это стандартный инструмент, который использует аннотации типов для автоматического создания тех же самых методов: from dataclasses import dataclass class InventoryItem: name: str unit_price: float quantity_on_hand: int = 0 def total_cost(self) -> float: return self.unit_price * self.quantity_on_hand Почему стоит обратить внимание на data classes: 1. Чистый код: Конструкция читается просто и выглядит лаконично. 2. Поддержка стандартной библиотеки: Не нужно добавлять зависимости. 3. Типы и валидация: С аннотациями типов ваш код становится более понятным и безопасным. attrs остаётся полезным инструментом, особенно если вам нужны более продвинутые возможности (например, валидация значений полей), но для большинства задач data classes — отличное решение прямо "из коробки". 👉
6
4
Когда вам нужно очистить список в Python, вы, скорее всего, используете lst = []. Однако на самом деле вы просто создаёте новый пустой список и присваиваете его переменной lst, а все другие переменные, которые ссылаются на исходный список, продолжают хранить его содержимое. Пример: lst = [1, 2, 3] lst2 = lst lst = [] print(lst2) # [1, 2, 3] Хотя это кажется очевидным, правильное решение стало доступно только с введением метода lst.clear() в Python 3.3. До этого для очистки списка приходилось использовать: - del lst[:], или - lst[:] = []. Оба варианта работают, поскольку срезы позволяют модифицировать часть списка. Если вы берёте срез [:], он охватывает весь список. Теперь же lst.clear() является более читаемым и современным решением. 👉
4
5
Как узнать размер генератора в Python? В Python часто возникает задача определить размер генератора без необходимости извлечения всех его значений. Это полезно, если вы работаете с большими потоками данных и хотите избежать избыточного расхода памяти. Пример с len() Некоторые итераторы, такие как range, поддерживают вызов len(): len(range(10000)) # 10000 Однако генераторы не имеют длины, и попытка вызвать len() вызовет ошибку: gen = (x ** 2 for x in range(10000)) len(gen) # TypeError: object of type 'generator' has no len() Стандартное решение: преобразование в список Один из способов получить размер генератора — это преобразовать его в список: gen = (x ** 2 for x in range(10000)) print(len(list(gen))) # 10000 Этот подход работает, но имеет серьёзный недостаток: он требует загрузить все значения генератора в память. Если генератор очень большой, это может привести к нехватке памяти. Более эффективный подход: подсчёт с помощью sum Чтобы избежать лишнего расхода памяти, можно подсчитать количество элементов в генераторе с использованием sum(): gen = (x ** 2 for x in range(10000)) print(sum(1 for _ in gen)) # 10000 Этот метод обходит генератор "лениво", не создавая дополнительных списков, что делает его идеальным для работы с большими потоками данных. Резюме - Используйте len() только для итераторов, поддерживающих его (например, `range`). - Для генераторов избегайте преобразования в список, если важна экономия памяти. - Используйте sum(1 for _ in gen) для эффективного подсчёта элементов генератора. 👉
5
6
Почему `range()` в Python использует полуоткрытые интервалы? Функция range() в Python работает с полуоткрытыми интервалами. Например, range(2, 10) задаёт числа в диапазоне [2, 10), то есть [2, 3, 4, 5, 6, 7, 8, 9]. На первый взгляд это может показаться неочевидным или асимметричным, но у такого подхода есть свои преимущества. Почему полуоткрытые интервалы? Полуоткрытые интервалы позволяют легко "склеивать" смежные диапазоны без риска ошибок на единицу: - Если a = 2, b = 5, и c = 10, то [a, c) можно выразить как: [a, c) = [a, b) + [b, c) Это работает идеально, потому что конец одного интервала (`b`) автоматически становится началом следующего. В случае закрытых интервалов, такая "склейка" требует дополнительной обработки: [a, c] = [a, b] + [b+1, c] Связь с индексацией с нуля Индексация с нуля в Python также связана с этим принципом. Рассмотрим диапазон range(0, N): - Этот диапазон включает ровно N элементов, что делает код более предсказуемым: for i in range(0, N): print(i) Здесь i проходит значения от 0 до N-1, что логично и удобно. Преимущества для работы с массивами Полуоткрытые интервалы идеально подходят для работы с индексами массивов: arr = [10, 20, 30, 40, 50] print(arr[1:3]) # [20, 30] Интервал [1:3) охватывает элементы с индексами 1 и 2, но не 3, что упрощает вычисления границ. Исторический контекст Этот подход имеет глубокие корни в компьютерной науке. Эдсгер Дейкстра, один из пионеров программирования, в 1982 году написал блестящую статью, в которой обосновал преимущества полуоткрытых интервалов. Это не просто удобство — это вопрос корректности и простоты работы с данными. 👉
6
7
Как использовать *args и **kwargs в python? В видео про декораторы мы использовали *args и **kwargs для того, чтобы передать
Как использовать *args и **kwargs в python? В видео про декораторы мы использовали *args и **kwargs для того, чтобы передать в функцию любое количество позиционных и именованных аргументов. Для того, чтобы понять как это работает, сначала познакомимся с тем, что такое распаковка. 👉
8
8
+2
لا يوجد نص...
10
9
Уроки Python Введение в искусственный интеллект. Обзор задач Введение в OpenCV | Работа с камерой Изучение OpenCV | Распознав+6
Уроки Python Введение в искусственный интеллект. Обзор задач Введение в OpenCV | Работа с камерой Изучение OpenCV | Распознавание автомобильных номеров Введение в ImageAI | Распознаем объекты на фото за 7.5 минут без OpenCV Изучение OpenCV | ImageAI для распознавание объектов в реальном времени Создаем навык для Яндекс.Алиса с использованием Flask Интеграция Яндекс.Алиса и Вконтакте Введение в распознавание контуров через OpenCV OpenCV. Распознавание цвета. Работа с событиями мыши Как знакомиться в тиндере с Tinder API источник 👉
9
10
Если вы хотите игнорировать какое-то исключение, вы, вероятно, сделаете что-то вроде этого: try: lst = [1, 2, 3, 4, 5] print(lst[10]) except IndexError: pass Это будет работать (ничего не выводя), но contextlib позволяет сделать то же самое более выразительно и семантически правильно: from contextlib import suppress with suppress(IndexError): lst = [1, 2, 3, 4, 5] lst[10] 👉
9
11
Когда вы пишете декоратор в Python, почти всегда стоит использовать .wraps. def atomic(func): .wraps(func) def wrapper(): print('BEGIN') func() print('COMMIT') return wrapper Он обновляет обёртку wrapper, чтобы она выглядела как оригинальная функция func. Декоратор копирует атрибуты __name__, __module__ и __doc__ из функции func в её обёртку. Это может быть полезно при генерации документации с помощью pydoc, написании тестов с doctest, или при использовании инструментов для интроспекции. Однако стоит помнить, что в трассировке стека всё ещё будет отображаться оригинальное имя функции, поскольку оно хранится в wrapper.__code__.co_name. 👉
820
12
💡Шпаргалка: API OpenAI в Python Небольшая шпаргалка поможет быстро начать работу с API OpenAI. В ней показано: ▪️как добавит+2
💡Шпаргалка: API OpenAI в Python Небольшая шпаргалка поможет быстро начать работу с API OpenAI. В ней показано: ▪️как добавить API-ключ и посмотреть доступные модели, ▪️как генерировать текст с помощью GPT, ▪️как работать с эмбеддингами, ▪️как конвертировать речь в текст, ▪️как создавать изображения с помощью DALL-E. 👉
791
13
Как работать с объектным хранилищем на Python Файлы в проекте можно хранить разными способами: локально на компьютере, в базе
Как работать с объектным хранилищем на Python Файлы в проекте можно хранить разными способами: локально на компьютере, в базе данных или S3-хранилище (объектное хранилище). Последнее — одно из самых популярных решений. Оно отличается надежностью и масштабируемостью. Использовать S3 можно не только в личных целях, но и для решения бизнес-задач. Для специалиста навык работы с объектным хранилищем востребован. Он поможет быстрее дойти до следующего уровня в карьере. Под катом расскажем о преимуществах S3, научимся загружать и получать файлы, сверстаем небольшой сайт с его использованием! https://habr.com/ru/companies/selectel/articles/822855/ 👉
22
14
Срез списка по умолчанию в Python создаёт копию. Это может быть нежелательно, если срез слишком велик, требуется, чтобы изменения отражались в оригинале, или нужно изменять срез, влияя на исходный объект. Для обхода проблемы копирования данных можно использовать itertools.islice, который позволяет итерироваться по части списка без поддержки индексации или модификации. Для создания изменяемого среза можно реализовать собственный класс, используя collections.abc.MutableSequence, переопределив методы __getitem__, __setitem__, __delitem__, __len__ и insert. 👉
19
15
Создание ботов на Python с использованием aiogram Создание Telegram ботов на AIOGRAM 3.4 Фильтры и работа с сообщениями на AI+9
Создание ботов на Python с использованием aiogram Создание Telegram ботов на AIOGRAM 3.4 Фильтры и работа с сообщениями на AIOGRAM 3.4 Роутеры и структура Telegram бота на AIOGRAM 3.4 Клавиатура в Телеграм Ботах - Inline Reply и Builder на AIOGRAM 3.4 CallbackQuery на AIOGRAM 3.4 FSM Context - машина состояний на AIOGRAM 3.4 Middleware на AIOGRAM 3.4 Телеграм Бот на Python с нуля! | Telegram Bot на Aiogram для начинающих База Данных и Выгрузка на Сервер Телеграм Бота на Python - Aiogram 3 PostgreSQL + Скрытие Токена в .env - Aiogram 3 ДЕПЛОЙ БОТА НА СЕРВЕР | AIOGRAM 3 To Do БОТ на Python для ТЕЛЕГРАМ | AIOGRAM EASY BOT #1 источник 👉
840
16
Обзор библиотеки RxPY Сегодня поговорим о хорошей библиотеке для управления потоками данных в Python – RxPY — реализации Reac
Обзор библиотеки RxPY Сегодня поговорим о хорошей библиотеке для управления потоками данных в Python – RxPY — реализации Reactive Extensions для нашего любимого языка. В версии 4.0.4 эта библиотека получила ряд улучшений, и сегодня мы разберем её основной функционал. Основы RxPY RxPY — это библиотека, реализующая принципы функционального реактивного программирования в Python. Она позволяет создавать и управлять асинхронными потоками данных, объединяя их, фильтруя и трансформируя с помощью цепочек операторов. Основные компоненты RxPY: Observable: источник данных, который может выдавать события. Observer: подписчик, который реагирует на события от Observable. Операторы: функции, позволяющие трансформировать, фильтровать и комбинировать Observable. https://habr.com/ru/companies/otus/articles/849810/ 👉
799
17
Что такое контекстный менеджер в Python? Контекстный менеджер в Python — это специальный тип объекта, который определяет методы enter() и exit() и используется с инструкцией with. Эти объекты часто применяются в операциях, которые требуют установки и освобождения ресурсов.  Частый сценарий — это работа с файлом: with open('file.txt', 'r') as file: data = file.read() Здесь контекстный менеджер гарантирует, что файл будет корректно закрыт после завершения блока with, даже если при чтении файла возникнет исключение. Вот как можно написать простой контекстный менеджер самостоятельно: import time class Timer: def __enter__(self): self.start = time.time() def __exit__(self, exc_type, exc_val, exc_tb): self.end = time.time() print(f'Время выполнения: {self.end - self.start:.2f} секунд') with Timer(): # код, время выполнения которого нужно измерить time.sleep(2) 👉
810
18
В Python вы можете переопределить оператор квадратных скобок ([]), определив магический метод getitem. Примером может быть объект Cycle, который виртуально содержит бесконечное количество повторяющихся элементов: class Cycle: def __init__(self, lst): self._lst = lst def __getitem__(self, index): return self._lst[index % len(self._lst)] print(Cycle(['a', 'b', 'c'])[100]) # prints 'b' Необычность здесь заключается в том, что оператор [] поддерживает уникальный синтаксис. Он может использоваться не только так — [2], но и так — [2:10], или [2:10:2], или [2::2], или даже [:]. Семантика — [start:stop:step], но вы можете применять её так, как вам нужно, для ваших собственных объектов. Но что же получает getitem в качестве параметра index, если использовать этот синтаксис? Для этого существуют объекты slice. In : class Inspector: ...: def __getitem__(self, index): ...: print(index) ...: In : Inspector()[1] 1 In : Inspector()[1:2] slice(1, 2, None) In : Inspector()[1:2:3] slice(1, 2, 3) In : Inspector()[:] slice(None, None, None) Вы даже можете комбинировать синтаксис кортежей и срезов: In : Inspector()[:, 0, :] (slice(None, None, None), 0, slice(None, None, None)) Slice не делает ничего, кроме как просто хранит атрибуты start, stop и step. In : s = slice(1, 2, 3) In : s.start Out: 1 In : s.stop Out: 2 In : s.step Out: 3 👉
13
19
Простая, но гибкая естественная сортировка на языке Python Когда вы пытаетесь отсортировать список строк, содержащих числа, обычный алгоритм сортировки python сортирует лексикографически, поэтому вы можете не получить ожидаемых результатов >>> a = ['2 ft 7 in', '1 ft 5 in', '10 ft 2 in', '2 ft 11 in', '7 ft 6 in'] >>> sorted(a) ['1 ft 5 in', '10 ft 2 in', '2 ft 11 in', '2 ft 7 in', '7 ft 6 in'] https://github.com/SethMMorton/natsort 👉
12
20
Вредные советы python разработчику l=[['a', 'b', 'c'], ['1', '2'], ['#']] sum(l, []) В Python можно выпрямить вложенные списки с помощью... функции sum(). Вот код (выполнять, пока никто не видит): Дело в том, что sum() принимает первым аргументом итерируемый объект, а вторым — значение, с которого начинается операция. По умолчанию это 0, но если указать пустой список [], то sum() начнёт с него. Затем sum() последовательно применяет операцию сложения к элементам первого аргумента, начиная со значения второго аргумента. В случае списков это означает конкатенацию. 👉
808