Система поиска похожих изображений
Сделаем простую систему поиска похожих изображений. Сделаем ее без использования ИИ: для определения схожести мы будем переводить изображения в числовые векторы признаков, а векторы сравнивать с помощью расстояния.
Логика кода проста. Сначала мы превращаем все изображения базы в векторы. Затем извлекаются признаки из запроса. Вычисляем сходство между запросом и базой и в результате выводим топ-N наиболее похожих изображений.
При желании можно улучшить код. Например, вместо простых цветов взять признаки через нейросеть, или выделить отдельные признаки для поиска по цвету, текстуре, объемам.
Ссылка на код
Разъяснивший Python
Сделаем простую систему поиска похожих изображений. Сделаем ее без использования ИИ: для определения схожести мы будем переводить изображения в числовые векторы признаков, а векторы сравнивать с помощью расстояния.
Логика кода проста. Сначала мы превращаем все изображения базы в векторы. Затем извлекаются признаки из запроса. Вычисляем сходство между запросом и базой и в результате выводим топ-N наиболее похожих изображений.
При желании можно улучшить код. Например, вместо простых цветов взять признаки через нейросеть, или выделить отдельные признаки для поиска по цвету, текстуре, объемам.
Ссылка на код
Разъяснивший Python
Получаем названия столбцов из результата запроса
При работе с базой данных важно знать названия полей в результатах запроса. Новички часто пытаются вручную догадываться о структуре результата, особенно если данных много или они получены из внешнего источника.
С sqlite3 можно легко получить названия столбцов прямо из курсора после выполнения запроса, без дополнительного кода.
Итог:
Чтобы получить список названий столбцов из SQL-запроса, можно использовать cursor.description — это простой способ понять структуру данных, особенно при работе с динамическими запросами.
Разъяснивший Python
При работе с базой данных важно знать названия полей в результатах запроса. Новички часто пытаются вручную догадываться о структуре результата, особенно если данных много или они получены из внешнего источника.
С sqlite3 можно легко получить названия столбцов прямо из курсора после выполнения запроса, без дополнительного кода.
Итог:
Чтобы получить список названий столбцов из SQL-запроса, можно использовать cursor.description — это простой способ понять структуру данных, особенно при работе с динамическими запросами.
Разъяснивший Python
Как автоматизировать инфраструктуру с помощью Terraform и Ansible
Terraform и Ansible — два популярных инструмента, которые помогают автоматизировать инфраструктуру и управлять ей. Рассказываем, в чем их особенности и как их можно интегрировать в разработку.
Читать
Разъяснивший Python
Terraform и Ansible — два популярных инструмента, которые помогают автоматизировать инфраструктуру и управлять ей. Рассказываем, в чем их особенности и как их можно интегрировать в разработку.
Читать
Разъяснивший Python
Tproger
Использование Terraform и Ansible - Автоматизация инфраструктуры - Tproger
Использование Terraform и Ansible. Показываем, как автоматизировать инфраструктуру. Рассматриваем возможные варианты и пошаговую инструкцию, а также интеграцию систем ✔ Tproger
Решаем криптарифмы с помощью алгебры и python
Числовые ребусы хороши для тренировки у младшеклассников навыков логического мышления и счета в столбик. Однако и взрослым программистам может быть интересно поискать ответ на общий вопрос - а как, всё таки, алгоритмизировать процесс решения ребуса?
Читать
Разъяснивший Python
Числовые ребусы хороши для тренировки у младшеклассников навыков логического мышления и счета в столбик. Однако и взрослым программистам может быть интересно поискать ответ на общий вопрос - а как, всё таки, алгоритмизировать процесс решения ребуса?
Читать
Разъяснивший Python
Хабр
Решаем криптарифмы с помощью алгебры и python
Если вы увлекались математикой в возрасте до 12 лет, то, наверное, встречались с криптарифмами - числовыми ребусами. Числовым ребусом называется корректное арифметическое выражение (обычно -...
👍1
Автоматически подставляем параметры в SQL-запрос
Новички иногда вставляют значения в SQL-запросы через f-строки или конкатенацию, что небезопасно и может привести к SQL-инъекциям. Python предлагает встроенный и безопасный способ подстановки данных в запрос с помощью параметризованных запросов.
Это не только безопаснее, но и удобнее для работы с переменными.
Итог:
Используйте ? и кортежи для подстановки значений в SQL-запросы — это защищает от SQL-инъекций и делает код чище и безопаснее.
Разъяснивший Python
Новички иногда вставляют значения в SQL-запросы через f-строки или конкатенацию, что небезопасно и может привести к SQL-инъекциям. Python предлагает встроенный и безопасный способ подстановки данных в запрос с помощью параметризованных запросов.
Это не только безопаснее, но и удобнее для работы с переменными.
Итог:
Используйте ? и кортежи для подстановки значений в SQL-запросы — это защищает от SQL-инъекций и делает код чище и безопаснее.
Разъяснивший Python
functools — встроенный в Python модуль, который предоставляет набор полезных функций, связанных с функциональным программированием.
Модуль functools предоставляет инструменты для работы с функциями высшего порядка, функциями обратного вызова (callback) и другими полезными возможностями.
Давайте разберём функцию reduce модуля functools.
Функция reduce применяет указанную функцию(в примере выше мы использовали lambda-функцию) к элементам итерируемого объекта слева направо, сворачивая их в одно значение. Это полезно, когда вам нужно применить операцию накопления к последовательности значений.
Использование функций из модуля functools позволяет повысить эффективность и удобство разработки, особенно при работе с функциональным программированием, декораторами и другими продвинутыми возможностями Python.
Разъяснивший Python
Модуль functools предоставляет инструменты для работы с функциями высшего порядка, функциями обратного вызова (callback) и другими полезными возможностями.
Давайте разберём функцию reduce модуля functools.
Функция reduce применяет указанную функцию(в примере выше мы использовали lambda-функцию) к элементам итерируемого объекта слева направо, сворачивая их в одно значение. Это полезно, когда вам нужно применить операцию накопления к последовательности значений.
Использование функций из модуля functools позволяет повысить эффективность и удобство разработки, особенно при работе с функциональным программированием, декораторами и другими продвинутыми возможностями Python.
Разъяснивший Python
Получаем количество строк, затронутых SQL-запросом
После выполнения SQL-запроса может потребоваться узнать, сколько строк было затронуто — например, при UPDATE или DELETE. Многие новички не знают, что Python позволяет легко получить это значение.
Используйте атрибут cursor.rowcount, чтобы сразу узнать, сколько строк было изменено или удалено.
Итог:
Разъяснивший Python
После выполнения SQL-запроса может потребоваться узнать, сколько строк было затронуто — например, при UPDATE или DELETE. Многие новички не знают, что Python позволяет легко получить это значение.
Используйте атрибут cursor.rowcount, чтобы сразу узнать, сколько строк было изменено или удалено.
Итог:
cursor.rowcount
позволяет получить количество строк, затронутых последним SQL-запросом — удобно для логирования, проверки и отладки.Разъяснивший Python
👍1
Безопасные SQL-запросы с параметрами
Новички часто вставляют значения прямо в SQL-строку, что может привести к SQL-инъекциям и ошибкам. В Python с библиотекой sqlite3 (и другими DB API) правильнее использовать параметры запроса.
Вместо конкатенации строк, используйте ? — это защитит вас от уязвимостей и избавит от лишнего форматирования.
Итог:
Используйте параметризованные запросы (? и кортеж) вместо подстановки значений вручную — это безопаснее и чище.
Разъяснивший Python
Новички часто вставляют значения прямо в SQL-строку, что может привести к SQL-инъекциям и ошибкам. В Python с библиотекой sqlite3 (и другими DB API) правильнее использовать параметры запроса.
Вместо конкатенации строк, используйте ? — это защитит вас от уязвимостей и избавит от лишнего форматирования.
Итог:
Используйте параметризованные запросы (? и кортеж) вместо подстановки значений вручную — это безопаснее и чище.
Разъяснивший Python
👍2
itertools для итерации более чем одного итерируемого объекта
Если вы когда-нибудь оказывались в ситуации, когда вы пишете вложенные циклы или сложные функции для итерации более чем одного итерируемого объекта, проверьте, есть ли нужная функция в библиотеке itertools.
Возможно, вам не придется изобретать велосипед — Python учтёт все ваши потребности.
🔗 Ссылочка на доку
Разъяснивший Python
Если вы когда-нибудь оказывались в ситуации, когда вы пишете вложенные циклы или сложные функции для итерации более чем одного итерируемого объекта, проверьте, есть ли нужная функция в библиотеке itertools.
Возможно, вам не придется изобретать велосипед — Python учтёт все ваши потребности.
🔗 Ссылочка на доку
Разъяснивший Python
partial — функция из модуля functools, которая используется для создания новой функции с некоторыми аргументами, которые уже заданы заранее.
На примере(см. выше) функция partial используется для создания новой функции с фиксированными значениями аргументов. Она принимает функцию и задает некоторые аргументы заранее, которые станут постоянными для создаваемой функции.
Это полезно, когда вы хотите создать функцию с некоторыми предустановленными аргументами
Разъяснивший Python
На примере(см. выше) функция partial используется для создания новой функции с фиксированными значениями аргументов. Она принимает функцию и задает некоторые аргументы заранее, которые станут постоянными для создаваемой функции.
Это полезно, когда вы хотите создать функцию с некоторыми предустановленными аргументами
Разъяснивший Python
Оптимизируем множественные вставки в БД
Когда нужно вставить много строк в базу данных, делать INSERT в цикле — медленно и неэффективно. Используйте
Итог:
Используйте
Разъяснивший Python
Когда нужно вставить много строк в базу данных, делать INSERT в цикле — медленно и неэффективно. Используйте
executemany()
— он вставляет все строки одним запросом, что значительно ускоряет выполнение.Итог:
Используйте
executemany()
для пакетной вставки данных — это быстрее и уменьшает нагрузку на базу.Разъяснивший Python
enumerate() — встроенная в Python функция, которая используется для итерации по последовательности одновременно с получением индекса и значения каждого элемента.
Синтаксис функции enumerate():
Разъяснивший Python
Синтаксис функции enumerate():
enumerate(sequence, start=1)
, где sequence - последовательность, по которой мы хотим производить итерацию (например, список, кортеж, строка и т.д.), а start (необязательный) - значение, с которого начинается индексирование. По умолчанию равно 0.Разъяснивший Python
setattr — функция, которая используется для установки значения атрибута объекта по его имени.
Синтаксис функции setattr():
• object - объект, для которого мы хотим установить атрибут.
• attribute_name - имя атрибута, который мы хотим установить.
• value - значение, которое мы хотим присвоить атрибуту.
Думаю, пример объяснять не надо. Если коротко: мы меняем артибут объекта Car :)
P.S. Если запрашиваемый атрибут не существует, то функция вернёт AttributeError, Необходимо обрабатывать это исключение.
Разъяснивший Python
Синтаксис функции setattr():
setattr(object, attribute_name, value)
• object - объект, для которого мы хотим установить атрибут.
• attribute_name - имя атрибута, который мы хотим установить.
• value - значение, которое мы хотим присвоить атрибуту.
Думаю, пример объяснять не надо. Если коротко: мы меняем артибут объекта Car :)
P.S. Если запрашиваемый атрибут не существует, то функция вернёт AttributeError, Необходимо обрабатывать это исключение.
Разъяснивший Python
Получаем количество строк без загрузки всех данных
Чтобы узнать, сколько строк вернёт запрос, не обязательно загружать все данные в память. Вместо SELECT * используйте SELECT COUNT(*) — это быстрее и экономит ресурсы.
Итог:
Используйте COUNT(*) для быстрой оценки количества записей — это эффективнее, чем вытягивать все строки и считать их вручную.
Разъяснивший Python
Чтобы узнать, сколько строк вернёт запрос, не обязательно загружать все данные в память. Вместо SELECT * используйте SELECT COUNT(*) — это быстрее и экономит ресурсы.
Итог:
Используйте COUNT(*) для быстрой оценки количества записей — это эффективнее, чем вытягивать все строки и считать их вручную.
Разъяснивший Python
👍1
pandas — модуль для анализа и обработки данных
Pandas высокоуровневые структуры данных, такие как DataFrame, для эффективной и удобной работы с табличными данными. Pandas позволяет считывать и записывать данные из различных источников, выполнять операции фильтрации, сортировки, группировки, объединения и агрегации данных. Он также предлагает широкий набор функций для обработки пропущенных значений, работы с датами и временем, визуализации данных и многое другое.
В примере(см. выше) мы создаем DataFrame с именами и возрастами персон. Затем мы выводим DataFrame на экран. Далее мы фильтруем данные, выбирая только персон с возрастом выше 30. И в конце мы выводим отфильтрованный DataFrame
Документация и примеры кода здесь
Разъяснивший Python
Pandas высокоуровневые структуры данных, такие как DataFrame, для эффективной и удобной работы с табличными данными. Pandas позволяет считывать и записывать данные из различных источников, выполнять операции фильтрации, сортировки, группировки, объединения и агрегации данных. Он также предлагает широкий набор функций для обработки пропущенных значений, работы с датами и временем, визуализации данных и многое другое.
В примере(см. выше) мы создаем DataFrame с именами и возрастами персон. Затем мы выводим DataFrame на экран. Далее мы фильтруем данные, выбирая только персон с возрастом выше 30. И в конце мы выводим отфильтрованный DataFrame
Документация и примеры кода здесь
Разъяснивший Python
getattr — функция, которая возвращает значение атрибута объекта с указанным именем
Если атрибут не существует, можно указать значение по умолчанию, которое будет возвращено вместо возбуждения исключения.
Синтаксис функции getattr:
• object - объект, у которого нужно получить атрибут.
• attribute_name - имя атрибута, значение которого нужно получить.
• default_value (необязательно) - значение по умолчанию, возвращаемое, если атрибут не существует.
На примере выше мы получаем атрибут "color" объекта Car(т.е. blue)
Разъяснивший Python
Если атрибут не существует, можно указать значение по умолчанию, которое будет возвращено вместо возбуждения исключения.
Синтаксис функции getattr:
getattr(object, attribute_name, default_value)
• object - объект, у которого нужно получить атрибут.
• attribute_name - имя атрибута, значение которого нужно получить.
• default_value (необязательно) - значение по умолчанию, возвращаемое, если атрибут не существует.
На примере выше мы получаем атрибут "color" объекта Car(т.е. blue)
Разъяснивший Python
👍1
PaddleOCR для оптического распознавания символов
PaddleOCR — многоязычные наборы инструментов OCR на основе DL-фреймворка PaddlePaddle.
Поддержка обучения и развертывания на серверных, мобильных, встроенных устройствах и IoT
Ссылочка на доку
Разъяснивший Python
PaddleOCR — многоязычные наборы инструментов OCR на основе DL-фреймворка PaddlePaddle.
Поддержка обучения и развертывания на серверных, мобильных, встроенных устройствах и IoT
Ссылочка на доку
Разъяснивший Python
❤1
Безопасные SQL-запросы через параметризованные запросы
Новички часто подставляют значения в SQL-запрос через f-строки или конкатенацию, что может привести к SQL-инъекциям. Вместо этого используйте параметризованные запросы — это безопасно и правильно.
Итог:
Всегда используйте параметризованные запросы для защиты от SQL-инъекций. Это безопаснее и чище, чем вручную подставлять значения в строки.
Разъяснивший Python
Новички часто подставляют значения в SQL-запрос через f-строки или конкатенацию, что может привести к SQL-инъекциям. Вместо этого используйте параметризованные запросы — это безопасно и правильно.
Итог:
Всегда используйте параметризованные запросы для защиты от SQL-инъекций. Это безопаснее и чище, чем вручную подставлять значения в строки.
Разъяснивший Python
Форматирование чисел с плавающей точкой.
Чтобы избежать e-число в числе с плавающей точкой — можно воспользоваться форматированием f-строк.
Синтаксис форматирования чисел с плавающей точкой
f"{число:.n}", где число - значение, которое мы хотим отформатировать, а n - количество знаков после запятой(вы также можете указать значение 0, что уберёт числа после запятой).
На примере(см. выше) получим цену SHIB, а зачем вывел e-число. Чтобы не показывать конечному пользователю некрасивое e-число, затем воспользуемся форматированием
Разъяснивший Python
Чтобы избежать e-число в числе с плавающей точкой — можно воспользоваться форматированием f-строк.
Синтаксис форматирования чисел с плавающей точкой
f"{число:.n}", где число - значение, которое мы хотим отформатировать, а n - количество знаков после запятой(вы также можете указать значение 0, что уберёт числа после запятой).
На примере(см. выше) получим цену SHIB, а зачем вывел e-число. Чтобы не показывать конечному пользователю некрасивое e-число, затем воспользуемся форматированием
Разъяснивший Python