📁 Как правильно структурировать Python-проект
Какие функции выделить в отдельные модули? Как хранить данные? Что можно объединить и изолировать? Эти вопросы должны встать перед вами, если вы хотите сделать Python-проект, который можно будет легко масштабировать и тестировать.
Вот несколько советов:
▪️Подумайте о структуре репозитория.
Лучше, чтобы она не была запутанной и в ней мог разобраться сторонний человек. За образец предлагается взять это:
Признаками плохой структуры могут быть циклические зависимости, интенсивное использование глобального контекста, спагетти-код.
Больше подробностей о том, как улучшить проект, использовать импорты и декораторы, работать с типами данных — в статье 👈
Какие функции выделить в отдельные модули? Как хранить данные? Что можно объединить и изолировать? Эти вопросы должны встать перед вами, если вы хотите сделать Python-проект, который можно будет легко масштабировать и тестировать.
Вот несколько советов:
▪️Подумайте о структуре репозитория.
Лучше, чтобы она не была запутанной и в ней мог разобраться сторонний человек. За образец предлагается взять это:
README.rst
LICENSE
setup.py
requirements.txt
sample/init.py
sample/core.py
sample/helpers.py
docs/conf.py
docs/index.rst
tests/test_basic.py
tests/test_advanced.py
▪️Н
е забудьте о структуре кода.Признаками плохой структуры могут быть циклические зависимости, интенсивное использование глобального контекста, спагетти-код.
Больше подробностей о том, как улучшить проект, использовать импорты и декораторы, работать с типами данных — в статье 👈
👍20❤3
Forwarded from Библиотека задач по Python | тесты, код, задания
🌳 Задача про вырубку деревьев
Фермер решил вырубить некоторые деревья, растущие перед его домом. Деревья перед домом посажены в ряд, всего там растёт n деревьев, расстояния между соседними деревьями одинаковы. После вырубки перед домом должно остаться m деревьев, и расстояния между соседними деревьями должны быть одинаковыми. Помогите фермеру выяснить, сколько существует способов вырубки деревьев.
Требуется написать программу, которая по заданным числам n и m определит, сколько существует способов вырубки некоторых из n деревьев так, чтобы после вырубки осталось m деревьев, и соседние деревья находились на равном расстоянии друг от друга. Выше на картинке показаны варианты для m = 5 и n = 3.
Пример ввода:
>> 125 25
Вывод:
>> 265
👇Попробуйте написать решение. Ответ опубликуем чуть позже.
Фермер решил вырубить некоторые деревья, растущие перед его домом. Деревья перед домом посажены в ряд, всего там растёт n деревьев, расстояния между соседними деревьями одинаковы. После вырубки перед домом должно остаться m деревьев, и расстояния между соседними деревьями должны быть одинаковыми. Помогите фермеру выяснить, сколько существует способов вырубки деревьев.
Требуется написать программу, которая по заданным числам n и m определит, сколько существует способов вырубки некоторых из n деревьев так, чтобы после вырубки осталось m деревьев, и соседние деревья находились на равном расстоянии друг от друга. Выше на картинке показаны варианты для m = 5 и n = 3.
Пример ввода:
>> 125 25
Вывод:
>> 265
👇Попробуйте написать решение. Ответ опубликуем чуть позже.
👍13🔥1
Обозначим расстояние между деревьями после вырубки d. Тогда существует n – d х (m – 1) – m + 1 способов вырубить деревья. Чтобы найти все варианты, нужно просуммировать способы по всем d. Кроме того, нужно учесть 2 частных случая – когда количество оставшихся после вырубки деревьев равно 0 или 1.
1️⃣ вариант:
n, m = list(map(int, input().split()))
trees = 0
if m == 0:
trees = 1
elif m == 1:
trees = n
else:
for d in range(1, n):
trees += (n - d) // (m - 1)
print(trees)
2️⃣ вариант:
n, m = map(int, input().split())
trees = 0
if m == 0:
trees = 1
elif m == 1:
trees = n
else:
for d in range(1, (n - 1) // (m - 1) + 1):
trees += n - (m - 1) * d
print(trees)
👉Ещё четыре олимпиадных задачи с решениями ищите в нашей статье👈
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16😁5❤1
🛠 Модуль functools для манипуляций с функциями
Позволяет адаптировать или расширять функции без необходимости полностью их переписывать.
➡️Основной инструмент — метод partial, который возвращает новую функцию с частично применёнными аргументами и ключевыми словами, определёнными в оригинальной функции. Это полезно, если один или несколько аргументов постоянные.
➡️Метод reduce() последовательно применяет некоторую функцию к элементам итерируемой последовательности. Он сводит этот итерируемый объект к единственному значению, накапливая результаты функции от пар элементов.
#код
Позволяет адаптировать или расширять функции без необходимости полностью их переписывать.
➡️Основной инструмент — метод partial, который возвращает новую функцию с частично применёнными аргументами и ключевыми словами, определёнными в оригинальной функции. Это полезно, если один или несколько аргументов постоянные.
from functools import partial
def multiply(x, y, z):
return x * y * z
# Создаём новую функцию, которая умножает значение на 2 и 3
multiply_by_6 = partial(multiply, 2, 3)
# Теперь, вызывая multiply_by_6 с одним аргументом, этот аргумент будет умножаться на 2 и 3
result = multiply_by_6(4) # -> 24
➡️Метод reduce() последовательно применяет некоторую функцию к элементам итерируемой последовательности. Он сводит этот итерируемый объект к единственному значению, накапливая результаты функции от пар элементов.
from functools import reduce
numbers = [1, 2, 3, 4, 5]
product = reduce(lambda x, y: x * y, numbers)
print(product) # Выведет 120, так как 1 * 2 * 3 * 4 * 5 = 120
#код
👍24
🐍➰ Создаём игру «Виселица» на Python. Часть 1. Командная строка
Осваиваем азы программирования на Python, разработав классическую игру «Виселица» с интерактивным интерфейсом и увлекательной геймплейной механикой.
🔗 Читать статью
Осваиваем азы программирования на Python, разработав классическую игру «Виселица» с интерактивным интерфейсом и увлекательной геймплейной механикой.
🔗 Читать статью
👍23
🤔А как вам такой алгоритм сортировки?
Перевод: «ждёт, пока космическая солнечная радиация не проманипулирует битами и отсортирует список»
➕Комментарий от пояснительной бригады:
Шутка основана на явлении single-event upset (SEU). Это изменение состояния электронного компонента, вызванное частицей ионизирующего излучения. Оно происходит из-за возникновения свободного заряда, который появляется в результате ионизации внутри или рядом с логическим элементом, таким как бит памяти.
#memes
Перевод: «ждёт, пока космическая солнечная радиация не проманипулирует битами и отсортирует список»
➕Комментарий от пояснительной бригады:
Шутка основана на явлении single-event upset (SEU). Это изменение состояния электронного компонента, вызванное частицей ионизирующего излучения. Оно происходит из-за возникновения свободного заряда, который появляется в результате ионизации внутри или рядом с логическим элементом, таким как бит памяти.
#memes
🔥20😁16👍5🤔2
Что такое Pickling и Unpickling?
Эти термины относятся к процессам сериализации и десериализации объектов.
▫️Pickling.
Модуль Pickle берёт любой Python-объект и конвертирует его в поток байтов. Этот процесс и называется pickling. Этот поток байтов может быть сохранён в файле или передан через сеть.
Пример:
▫️Unpickling.
Это обратный процесс, при котором поток байтов преобразуется обратно в объект Python.
Пример:
#вопросы_с_собеседований
Эти термины относятся к процессам сериализации и десериализации объектов.
▫️Pickling.
Модуль Pickle берёт любой Python-объект и конвертирует его в поток байтов. Этот процесс и называется pickling. Этот поток байтов может быть сохранён в файле или передан через сеть.
Пример:
import pickle
my_data = {'key': 'value', 'number': 42}
# Pickling (сериализация)
with open('data.pkl', 'wb') as file:
pickle.dump(my_data, file)
▫️Unpickling.
Это обратный процесс, при котором поток байтов преобразуется обратно в объект Python.
Пример:
with open('data.pkl', 'rb') as file:
loaded_data = pickle.load(file)
print(loaded_data) # Выведет: {'key': 'value', 'number': 42}
#вопросы_с_собеседований
👍22❤1
👍 Библиотека jsonschema для валидации данных в формате JSON
Позволяет проверять, соответствуют ли данные JSON Schema. Также предоставляет возможность отложенной (ленивой) валидации, для идентификации всех ошибок валидации по мере их возникновения.
Установка — pip install jsonschema
🔗Страница библиотеки на PyPI
Позволяет проверять, соответствуют ли данные JSON Schema. Также предоставляет возможность отложенной (ленивой) валидации, для идентификации всех ошибок валидации по мере их возникновения.
Установка — pip install jsonschema
🔗Страница библиотеки на PyPI
👍15❤3
👤Аутентификация, авторизация пользователей и единый вход (SSO) с использованием Django
Автор новой статьи на Хабре подробно рассказывает о реализации технологии Единого Входа (SSO — Single Sign-On). Она даёт возможность пользователям получать доступ к разным системам без повторного ввода логина и пароля.
Чтобы интегрировать приложение на Django с SSO, следует сначала разобраться с механизмами аутентификации и авторизации пользователей. Более подробно об этом всём читайте здесь 👈
Автор новой статьи на Хабре подробно рассказывает о реализации технологии Единого Входа (SSO — Single Sign-On). Она даёт возможность пользователям получать доступ к разным системам без повторного ввода логина и пароля.
Чтобы интегрировать приложение на Django с SSO, следует сначала разобраться с механизмами аутентификации и авторизации пользователей. Более подробно об этом всём читайте здесь 👈
👍17🔥4
😺 PikaPython — ультралёгкий интерпретатор Python
Для запуска требует всего 4 KB RAM. Готов к использованию «из коробки» без каких-либо дополнительных настроек. Легко расширяется с помощью C.
PikaPython похож на проект MicroPython, который также ориентирован на работу в условиях ограниченных ресурсов. Это делает интерпретатор подходящим для встроенных систем, устройств IoT и микроконтроллеров.
🧑💻 Репозиторий с подробными инструкциями и примерами
Для запуска требует всего 4 KB RAM. Готов к использованию «из коробки» без каких-либо дополнительных настроек. Легко расширяется с помощью C.
PikaPython похож на проект MicroPython, который также ориентирован на работу в условиях ограниченных ресурсов. Это делает интерпретатор подходящим для встроенных систем, устройств IoT и микроконтроллеров.
🧑💻 Репозиторий с подробными инструкциями и примерами
👏11👍8
🐍➰ Создаем игру «Виселица» на Python. Часть 2. Графический интерфейс на PySimpleGUI
В первой части мы написали код для получения и обработки вводимых игроком данных, создали некоторые компоненты и текстовый пользовательский интерфейс (TUI). Во второй части реализуем логику игры «Виселица» и создадим графический интерфейс с помощью PySimpleGUI.
🔗 Читать статью
В первой части мы написали код для получения и обработки вводимых игроком данных, создали некоторые компоненты и текстовый пользовательский интерфейс (TUI). Во второй части реализуем логику игры «Виселица» и создадим графический интерфейс с помощью PySimpleGUI.
🔗 Читать статью
🥰10⚡3❤3
🐍💬 Как часто вы используете ключевое слово del в Python?
Так написал один из пользователей Reddit. Что бы вы ответили?
❤️ — я действительно использую del
🤔 — да зачем это вообще нужно?
#интерактив
Я пишу код на Python уже многие годы, в основном бэкенд для веб-приложений, но почти никогда не использовал del. Есть у кого-нибудь интересные или убедительные примеры использования этой команды?
Так написал один из пользователей Reddit. Что бы вы ответили?
❤️ — я действительно использую del
🤔 — да зачем это вообще нужно?
#интерактив
🤔78❤37🌚7
🧑💻 Granian — HTTP-сервер, написанный на языке программирования Rust
Предназначен для использования в Python-приложениях. Преимущества Granian:
✔️Имеет единственную, правильную реализацию HTTP, поддерживающую версии 1, 2 (и в конечном итоге 3).
✔️Избегает обычной композиции зависимостей Gunicorn + uvicorn + http-tools на Unix-системах.
✔️Обеспечивает стабильную производительность по сравнению с существующими альтернативами.
Granian поддерживает ASGI/3, RSGI и WSGI, HTTPS, веб-сокеты.
Установка — pip install granian
🔗 Репозиторий проекта на GitHub
Предназначен для использования в Python-приложениях. Преимущества Granian:
✔️Имеет единственную, правильную реализацию HTTP, поддерживающую версии 1, 2 (и в конечном итоге 3).
✔️Избегает обычной композиции зависимостей Gunicorn + uvicorn + http-tools на Unix-системах.
✔️Обеспечивает стабильную производительность по сравнению с существующими альтернативами.
Granian поддерживает ASGI/3, RSGI и WSGI, HTTPS, веб-сокеты.
Установка — pip install granian
🔗 Репозиторий проекта на GitHub
🔥14👍2😁2
🤔 Зачем нужна функция reload() модуля importlib
Используется для перезагрузки ранее импортированного модуля.
Это может пригодиться при динамической настройке. Функция reload делает возможным изменение частей программы без остановки всей программы. То есть можно незамедлительно наблюдать эффекты от изменений в компонентах. Это позволяет значительно сократить цикл разработки.
✏️ Стоит помнить, что когда модуль перезагружается, его словарь, содержащий глобальные переменные, сохраняется. Если в новой версии модуля нет имён переменных, функций, классов, которые были определены в старой версии, то старое определение остаётся.
#код
Используется для перезагрузки ранее импортированного модуля.
Это может пригодиться при динамической настройке. Функция reload делает возможным изменение частей программы без остановки всей программы. То есть можно незамедлительно наблюдать эффекты от изменений в компонентах. Это позволяет значительно сократить цикл разработки.
✏️ Стоит помнить, что когда модуль перезагружается, его словарь, содержащий глобальные переменные, сохраняется. Если в новой версии модуля нет имён переменных, функций, классов, которые были определены в старой версии, то старое определение остаётся.
#код
👍9😁7❤2❤🔥1
django 5.0.pdf
9.6 MB
🐍 Большой справочник по Django
По сути, это полная документация. Разбита на главы, охватывающие все темы. Есть нужные инструкции и примеры кода. Всё на 2800 страницах!
Вот некоторые из тем:
✅ Установка
✅ Модели и базы данных
✅ Шаблоны
✅ Классы
✅ Миграции
✅ Аутентификация
✅ Логирование
По сути, это полная документация. Разбита на главы, охватывающие все темы. Есть нужные инструкции и примеры кода. Всё на 2800 страницах!
Вот некоторые из тем:
✅ Установка
✅ Модели и базы данных
✅ Шаблоны
✅ Классы
✅ Миграции
✅ Аутентификация
✅ Логирование
👍21❤6🥱1
🐻❄️ Быстрее Pandas в 10 раз: Polars — высокопроизводительная библиотека для анализа больших данных на Python
Разработанная с нуля на языке Rust библиотека Polars объединяет в себе скорость, гибкость и богатый инструментарий для анализа больших данных на Питоне, что позволяет считать её достойной заменой популярной библиотеке Pandas.
👉 Читайте о Polars подробнее в нашей статье 👈
Разработанная с нуля на языке Rust библиотека Polars объединяет в себе скорость, гибкость и богатый инструментарий для анализа больших данных на Питоне, что позволяет считать её достойной заменой популярной библиотеке Pandas.
👉 Читайте о Polars подробнее в нашей статье 👈
🔥15👍1
💬 from ... import ... или import ...?
Что предпочитаете использовать чаще? Какие аргументы в защиту своих предпочтений у вас есть?
❤️ — чаще всего я просто импортирую модули целиком (import)
👍 — нередко делаю from ... import ...
#интерактив
Что предпочитаете использовать чаще? Какие аргументы в защиту своих предпочтений у вас есть?
❤️ — чаще всего я просто импортирую модули целиком (import)
👍 — нередко делаю from ... import ...
#интерактив
👍216❤29🥰3
🐍 У нас есть еженедельная email-рассылка, посвященная последним открытиям и тенденциям в мире Python.
В ней:
● Новые возможности в последних версиях Python
● Работа с базами данных и SQL в Python
● Веб-разработка на Django и Flask
● Машинное обучение и анализ данных с помощью Python
● Автоматизация и работа с API на Python
● Тестирование и отладка кода на Python
● Задачи для новичков с решениями
👉Подписаться👈
В ней:
● Новые возможности в последних версиях Python
● Работа с базами данных и SQL в Python
● Веб-разработка на Django и Flask
● Машинное обучение и анализ данных с помощью Python
● Автоматизация и работа с API на Python
● Тестирование и отладка кода на Python
● Задачи для новичков с решениями
👉Подписаться👈
👍6❤1😁1
✏️ Сравнение производительности dict() и {} в Python
Создать словарь в Python можно несколькими способами. Как выяснил автор новой статьи, способ {} будет работать быстрее dict(). Но почему?
Чтобы это понять, автору пришлось покопаться в коде интерпретатора CPython. Если коротко:
▪️Когда выполняется dict(a=1, b=2), Python должен:
- распределить новый PyObject,
- создать dict при помощи метода __new__,
- вызвать его метод __init__, который внутри вызывает PyDict_Merge,
- так как kwargs не является dict, PyDict_Merge необходимо использовать более медленный метод, вставляющий элементы один за другим.
▪️Когда выполняется {}, Python должен:
- создать новый заранее распределённый словарь,
- один за другим вставлять элементы.
Более подробно об этом читайте в статье 👈
Создать словарь в Python можно несколькими способами. Как выяснил автор новой статьи, способ {} будет работать быстрее dict(). Но почему?
Чтобы это понять, автору пришлось покопаться в коде интерпретатора CPython. Если коротко:
▪️Когда выполняется dict(a=1, b=2), Python должен:
- распределить новый PyObject,
- создать dict при помощи метода __new__,
- вызвать его метод __init__, который внутри вызывает PyDict_Merge,
- так как kwargs не является dict, PyDict_Merge необходимо использовать более медленный метод, вставляющий элементы один за другим.
▪️Когда выполняется {}, Python должен:
- создать новый заранее распределённый словарь,
- один за другим вставлять элементы.
Более подробно об этом читайте в статье 👈
👍31❤3
🤖 Список инструментов и библиотек для разработки роботов на Python и C++
В репозитории можно найти:
✅ Библиотеки для работы с ROS (Robot Operating System).
✅ Инструменты для обработки изображений и компьютерного зрения.
✅ Различные фреймворки и библиотеки для машинного обучения.
✅ Библиотеки для симуляции и моделирования роботов.
✅ Инструменты для обработки данных и аналитики.
🔗 Ссылка на репозиторий
В репозитории можно найти:
✅ Библиотеки для работы с ROS (Robot Operating System).
✅ Инструменты для обработки изображений и компьютерного зрения.
✅ Различные фреймворки и библиотеки для машинного обучения.
✅ Библиотеки для симуляции и моделирования роботов.
✅ Инструменты для обработки данных и аналитики.
🔗 Ссылка на репозиторий
👍8