Python академия
7.2K subscribers
2.59K photos
5 videos
428 links
Учи Python быстро и легко.

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

Подходит для прокачки навыков кодирования.

По всем вопросам @evgenycarter
Download Telegram
Методов списков list

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

1. list.append(x) – добавляет элемент, переданный в качестве аргумента, в конец списка. Этот метод является самым простым и распространённым в коде.

2. list.insert(i, x) – вставляет элемент в переданную позицию. Первый аргумент означает индекс элемента, перед которым будет добавлено новое значения.

Таким образом, list.insert(0, x) вставит элемент в начало списка, а list.insert(len(list), x) эквивалентно записи list.append(x).

3. list.extend(iterable) – расширяет список, добавляя все элементы другой коллекции.

📲 Мы в MAX

Подписывайтесь на канал 👉@pythonofff
👍2
Ограничьте использование процессора и памяти

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

📲 Мы в MAX

Подписывайтесь на канал 👉@pythonofff
👍1
3 трюка с itertools

Сегодня мы рассмотрим несколько функций из довольно полезного модуля, позволяющих эффективно работать с итерируемыми объектами. Начнём с очень простой функции – chain. Она позволяет "склеивать" несколько итерируемых элементов в один.

Далее, accumulate. Эта функция немного похожа на reduce, но вместо того, чтобы давать одно окончательное значение, она последовательно применяет функцию, заданную вторым аргументом (в данном случае min), к каждому последующему элементу по порядку: min(11), min(11, 3), min(11, 3, 9) и так далее.

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

📲 Мы в MAX

Подписывайтесь на канал 👉@pythonofff
👍1🔥1
Разработка ИИ-приложений с Claude Code. Бесплатный урок курса «Вайб-кодинг: создание цифровых продуктов с ИИ»

Claude Code помогает быстрее писать, анализировать и дорабатывать код. Но ценность такого инструмента раскрывается не тогда, когда вы просите «сделай приложение», а когда умеете дробить задачу, задавать контекст, контролировать архитектуру и вести разработку пошагово. Иначе вместо ускорения получится набор кусков кода, которые трудно проверить и связать в рабочий продукт.

На открытом уроке 21 июля в 20:00 разберём, как использовать Claude Code для практической разработки ИИ-продуктов и сервисов. Посмотрим, как с его помощью создавать Telegram-ботов, ИИ-агентов и внутренние сервисы, генерировать серверную логику, программные интерфейсы, интеграции и автоматизации через текстовые запросы.
Отдельно обсудим подходы к работе с большими проектами: структуру промптов, контекст, пошаговую разработку и проверку результата.

Также покажем, как применять Claude Code для доработки кода, поиска ошибок и ускорения разработки. Урок поможет понять, как выстроить процесс вайб-кодинга при создании реальных цифровых продуктов, а не просто генерировать отдельные фрагменты.

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

👉 Записаться: https://vk.cc/cZzmqV

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Правильным ответом является [1, 2]

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

А для того, чтобы добиться правильного поведения функции, следует воспользоваться ключевым словом None при о

📲 Мы в MAX

Подписывайтесь на канал 👉@pythonofff
👍1🤔1
Частичное применение

Сегодня поговорим об одном интересном концепте из области функционального программирования. Использовать будем функцию partial из стандартной библиотеки functools.

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

Другими словами, это такая функция, которая принимает другую функцию с несколькими параметрами и возвращает функцию, но уже с меньшим количеством параметров.

📲 Мы в MAX

Подписывайтесь на канал 👉@pythonofff
👍1
Именование среза с использованием функции slice

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

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

📲 Мы в MAX

Подписывайтесь на канал 👉@pythonofff
👍2🔥1
Switch-конструкция с помощью словаря

Привет, на связи Адриан. Начинающие программисты достаточно часто спрашивают меня про switch-конструкции, а в Python их вобщем-то нет.

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

В этом примере я использовал lambda-функции для упрощения кода, но вместо них можете подставить любые другие. Объясню немного подробнее, lambda – объявление анонимной функции, x и y - принимаемые аргументы, x + y – возвращаемый результат.

📲 Мы в MAX

Подписывайтесь на канал 👉@pythonofff
👍3
Генерация уникальных идентификаторов

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

Стандартный модуль uuid — быстрый и простой способ сгенерировать UUID (universally unique identifier), глобально уникальный идентификатор.

Так, мы можем создать случайное 128-битное число, которое наверняка будет уникальным. Существует более 2¹²² возможных UUID. Это более 5 ундециллионов, то есть 36 нулей.

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

Вполне недурно для двух строк кода.

📲 Мы в MAX

Подписывайтесь на канал 👉@pythonofff
👍1👎1
⁠Кэширование функций

Кэширование может сэкономить время, когда связанная с вводом или выводом функция периодически вызывается с одинаковыми аргументами. Раньше приходилось создавать свою реализацию, но в Python 3.2+ появился декоратор lru_cache, который позволяет нам быстро кэшировать и вскрывать возвращаемые значения функции.

Давайте реализуем калькулятор чисел Фибоначчи с использованием кэша. Советую попробовать запустить любую рекурсивную функцию с кэшированием и без него, прирост в скорости замечается сразу.

📲 Мы в MAX

Подписывайтесь на канал 👉@pythonofff
👍2
Ускоряем код с помощью векторизации

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

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

По сути, vectorize преобразует функцию таким образом, что она начинает принимать весь вектор целиком, а не отдельный его элемент. Надо помнить, что такой подход не всегда приводит к значительному ускорению.

📲 Мы в MAX

Подписывайтесь на канал 👉@pythonofff
👍1
Explicit Conversion Flag

Флаг явного преобразования используется для преобразования значения поля format перед его непосредственным форматированием.

Это поле можно использовать для переопределения поведения format для какого либо конкретного типа и форматирования значения. В настоящее время распространены два явных флага преобразования:

!r – преобразует значение в строку, используя функцию repr()
!s – преобразует значение в строку, используя функцию str()

В примере, в случае с флагом !r строка 'Hello' будет напечатана с кавычками в поле шириной не менее 20 символов, а в случае с флагом !s – без кавычек (в более удобном для чтения виде).

📲 Мы в MAX

Подписывайтесь на канал 👉@pythonofff
👍1
🚀 Подборка полезных IT каналов в Max


Системное администрирование, DevOps 📌

https://max.ru/i_odmin Все для системного администратора
https://max.ru/bash_srv Bash Советы
https://max.ru/sysadminof Книги для админов, полезные материалы
https://max.ru/i_odmin_book Библиотека Системного Администратора
https://max.ru/i_devops DevOps: Пишем о Docker, Kubernetes и др.
https://max.ru/tipsysdmin Типичный Сисадмин
https://max.ru/channel_win_sysadmin Системный Администратор Windows
https://max.ru/channel_linux_admin Linux: Системный администратор
https://max.ru/channel_linuxmod Linux
https://max.ru/channel_i_linux Системный администратор
https://max.ru/channel_devopslib DevOps, SRE, Sysadmin
https://max.ru/channel_devops_star DevOps Star (Звезда Девопса)

Excel лайфхак 📌
https://t.me/Excel_lifehack Excel лайфхак

Английский с нуля 🇬🇧
https://max.ru/UchuEnglish

1C разработка 📌
https://max.ru/odin1c_rus Cтатьи, курсы, советы, шаблоны кода 1С
https://max.ru/channel_DevLab1C 1С:Предприятие 8

Программирование C++📌
https://max.ru/cpp_lib Библиотека C/C++ разработчика
https://max.ru/channel_cpp_geek C++ geek

Программирование Go📌
https://max.ru/golang_lib Библиотека Go (Golang) разработчика

Программирование React📌
https://max.ru/react_lib React

Программирование Rust📌
https://max.ru/channel_rust_lib

Программирование Python 📌
https://max.ru/python_of Python академия.
https://max.ru/BookPython Библиотека Python разработчика

Java разработка 📌
https://max.ru/bookjava Библиотека Java разработчика
https://max.ru/channel_java_geek Java Geek

GitHub Сообщество 📌
https://max.ru/githublib Интересное из GitHub

Базы данных (Data Base) 📌
https://max.ru/database_info Все про базы данных

Фронтенд разработка 📌
https://max.ru/frontend_1 Подборки для frontend разработчиков

Библиотеки 📌
https://max.ru/programmist_of Книги по программированию
https://max.ru/proglb Библиотека программиста
https://max.ru/bfbook Книги для программистов

Программирование 📌
https://max.ru/bookflow Лекции, видеоуроки, доклады с IT конференций
https://max.ru/itmozg Программисты, дизайнеры, новости из мира IT
https://max.ru/php_lib Библиотека PHP программиста 👨🏼‍💻👩‍💻

Шутки программистов 📌
https://max.ru/itumor Шутки программистов

Защита, взлом, безопасность 📌
https://max.ru/thehaking Канал о кибербезопасности
https://max.ru/xakkep_1 Хакер Free

Книги, статьи для дизайнеров 📌
https://max.ru/odesigners Статьи, книги для дизайнеров

Математика 📌
https://max.ru/Pomatematike Канал по математике
https://max.ru/phismat_1 Обучающие видео, книги по Физике и Математике

Вакансии в IT📌
https://max.ru/progjob
https://max.ru/channel_rabotait

Мир технологий 📌
https://max.ru/mir_teh Канал для любознательных

Бонус 📌
https://max.ru/piterspb_78 Свежие новости Санкт-Петербурга
https://max.ru/mockva_life Свежие новости Москвы
https://max.ru/piterspb Питер Новости: Санкт-Петербург / СПБ / ДТП
Вычисляем размер объектов в памяти

Чтобы вычислить размер какого-либо объекта, можно воспользоваться функцией sys.getsizeof(object[, default]). Поскольку Python написан в полном соответствии с парадигмой ООП, таким объектом может быть все что угодно.

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

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

Функция getsizeof вызывает метод sizeof объекта и добавляет дополнительные служебные данные сборщика мусора, если конечно объект управляется сборщиком мусора.

📲 Мы в MAX

Подписывайтесь на канал 👉@pythonofff
👍1
⁠Автоматический счетчик во время итераций по коллекциям

Привет. Достаточно часто я наблюдаю ситуации, в которых новички создают "костыли", когда им необходим счетчик во время обхода коллекции. И вот решение проблемы.

Итак, встроенная в Python функция enumerate применяется для итерируемых коллекций (строки, списки, словари и другие) и создает объект, который генерирует кортежи, состоящие из двух элементов – индекса элемента и самого элемента.

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

📲 Мы в MAX

Подписывайтесь на канал 👉@pythonofff
👍1
⌨️ Многозадачность в python. Асинхронность, процессы, потоки

Приглашаем на открытый урок.

🗓 04 августа в 20:00 МСК
🆓 Бесплатно. Урок в рамках старта курса «Python-разработчик. Продвинутый уровень».

Что будет на вебинаре?
✔️ Разберём особенности различных способов реализации многозадачности.
✔️ Рассмотрим оптимальные случаи применения каждого из способов
✔️ Увидим изменения в реализации многозадачности в различных версиях Python

Что в результате вебинара узнают слушатели? Как/где смогут применить полученные навыки?
- Выбирать оптимальную реализацию многозадачности в зависимости от решаемой проблемы
- Получать значения метрик, необходимых для анализа преимуществ внедрения многозадачности
- Создавать код, использующий аппаратные ресурсы более оптимальным способом.


🔗 Ссылка на регистрацию: https://vk.cc/cZYkTk

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Please open Telegram to view this post
VIEW IN TELEGRAM
Логические any и all

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

Функция any возвращает значение True, если хотя бы одно из переданных утверждений верно, all – в случае, если все верны.

На мой взгляд, эти две функции заслуживают отдельного внимания всего лишь из-за их простоты в использовании.

📲 Мы в MAX

Подписывайтесь на канал 👉@pythonofff
👍1🔥1
⁠Блок else в циклах for

Хауди хо, друзья. Практически все новички теряются при виде блока else после циклов, поэтому сейчас немного проясним ситуацию.

В Python блок else может быть представлен не только в условных конструкциях после if, но и в циклах после for и while. В данном случае код внутри else выполняется, только если цикл не был прерван с помощью break.

Типичный пример использования – поиск чего-либо в цикле с использованием ключевого слова break при нахождении, как показано на картинке. Исходный код текстом можете найти в нашем чате.

📲 Мы в MAX

Подписывайтесь на канал 👉@pythonofff
👍2
"Быстрый" контейнер deque

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

К тому же, контейнер deque обеспечивает линейную сложность O(1) для операций добавления и выталкивания по сравнению со стандартным списком, у которого сложность по времени для тех же операций составляет O(n).

Также для deque есть возможность использовать такие стандартные функции, как sum, min, max и другие.

📲 Мы в MAX

Подписывайтесь на канал 👉@pythonofff
👍1
Метод get для словарей

У словарей есть метод get, который возвращает значение по ключу, переданному в аргументах функции.

Однако если такого ключа в словаре нет, то исключение не выбрасывается, а возвращается значение по умолчанию, которое передаётся вторым аргументом, или же None, если второй аргумент не передан.

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

📲 Мы в MAX

Подписывайтесь на канал 👉@pythonofff
👍1
Pyperclip

Модуль pyperclip имеет функции copy() и paste(), которые позволяют отправлять текст в буфер обмена вашего компьютера и получать его оттуда.

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

Установить этот модуль можно привычным способом через пакетный менеджер pip.

📲 Мы в MAX

Подписывайтесь на канал 👉@pythonofff
👍1