3 трюка с itertools
Сегодня мы рассмотрим несколько функций из довольно полезного модуля, позволяющих эффективно работать с итерируемыми объектами. Начнём с очень простой функции – chain. Она позволяет "склеивать" несколько итерируемых элементов в один.
Далее, accumulate. Эта функция немного похожа на reduce, но вместо того, чтобы давать одно окончательное значение, она последовательно применяет функцию, заданную вторым аргументом (в данном случае min), к каждому последующему элементу по порядку: min(11), min(11, 3), min(11, 3, 9) и так далее.
А для того, чтобы создавать комбинации из элементов выбранного итерируемого объекта, вам понадобится функция combinations. Вторым аргументом можно задать длину этой самой комбинации.
Подписывайтесь на канал 👉@pythonofff
Сегодня мы рассмотрим несколько функций из довольно полезного модуля, позволяющих эффективно работать с итерируемыми объектами. Начнём с очень простой функции – chain. Она позволяет "склеивать" несколько итерируемых элементов в один.
Далее, accumulate. Эта функция немного похожа на reduce, но вместо того, чтобы давать одно окончательное значение, она последовательно применяет функцию, заданную вторым аргументом (в данном случае min), к каждому последующему элементу по порядку: min(11), min(11, 3), min(11, 3, 9) и так далее.
А для того, чтобы создавать комбинации из элементов выбранного итерируемого объекта, вам понадобится функция combinations. Вторым аргументом можно задать длину этой самой комбинации.
Подписывайтесь на канал 👉@pythonofff
👍5
Имена и их пространство
Если вы проанализируете пространство имен слов, вы получите две вещи. Одно имя, а другое пространство.
По сути, имя относится к имени объекта (также известному, как идентификатор). Это означает, что объявляемый вами объект увеличивает пространство имен.
И мы уже говорили ранее, что пространство имен в Python реализовано с использованием словаря.
Подписывайтесь на канал 👉@pythonofff
Если вы проанализируете пространство имен слов, вы получите две вещи. Одно имя, а другое пространство.
По сути, имя относится к имени объекта (также известному, как идентификатор). Это означает, что объявляемый вами объект увеличивает пространство имен.
И мы уже говорили ранее, что пространство имен в Python реализовано с использованием словаря.
Подписывайтесь на канал 👉@pythonofff
💩1
FastAPI
FastAPI – фреймворк, про который однозначно стоит рассказать. Честно, синтаксис мне кажется намного приятнее, чем у других фреймворков.
Интересно, что автор фреймворка глубоко изучил несколько других фреймворков, от классических, таких как Django, до более современных, таких как Sanic, а также изучил различные технологии в NestJS (веб-фреймворк Node.js, Typescript).
Фреймворк имеет важную особенность – автоматическая генерация документации: как только ваши конечные точки будут реализованы, вы сможете поиграться с API, используя соответствующий стандартам пользовательский интерфейс. Поддерживаются SwaggerUI, ReDoc и другие.
FastAPI построен на удивительной библиотеке Starlette, в результате чего производительность сравнима с Node.js, а в некоторых случаях даже Go! В целом, складывается стойкое предчувствие, что FastAPI будет мчаться вперёд как лучший асинхронный фреймворк для Python.
Подписывайтесь на канал 👉@pythonofff
FastAPI – фреймворк, про который однозначно стоит рассказать. Честно, синтаксис мне кажется намного приятнее, чем у других фреймворков.
Интересно, что автор фреймворка глубоко изучил несколько других фреймворков, от классических, таких как Django, до более современных, таких как Sanic, а также изучил различные технологии в NestJS (веб-фреймворк Node.js, Typescript).
Фреймворк имеет важную особенность – автоматическая генерация документации: как только ваши конечные точки будут реализованы, вы сможете поиграться с API, используя соответствующий стандартам пользовательский интерфейс. Поддерживаются SwaggerUI, ReDoc и другие.
FastAPI построен на удивительной библиотеке Starlette, в результате чего производительность сравнима с Node.js, а в некоторых случаях даже Go! В целом, складывается стойкое предчувствие, что FastAPI будет мчаться вперёд как лучший асинхронный фреймворк для Python.
Подписывайтесь на канал 👉@pythonofff
👍8🔥1
Оператор continue
Мы можем использовать операторы continue внутри цикла, чтобы пропустить выполнение тела цикла for для определенного условия.
Допустим, у нас есть список чисел, и мы хотим вывести сумму положительных чисел. Мы можем использовать операторы continue, чтобы пропустить цикл для отрицательных чисел.
Подписывайтесь на канал 👉@pythonofff
Мы можем использовать операторы continue внутри цикла, чтобы пропустить выполнение тела цикла for для определенного условия.
Допустим, у нас есть список чисел, и мы хотим вывести сумму положительных чисел. Мы можем использовать операторы continue, чтобы пропустить цикл для отрицательных чисел.
Подписывайтесь на канал 👉@pythonofff
👍3💩3
Геттеры и сеттеры
В объектно-ориентированных языках распространено использование геттеров и сеттеров для безопасной работы с приватными полями. Например, в C# для этого есть удобная конструкция { get; set; }.
В Python геттер реализуется через декоратор @ property, а сеттер в виде @ свойство.setter. В примере метод геттера называется age, поэтому декоратор сеттера – @ age.setter.
Оба метода должны иметь одинаковое название, по которому можно будет обращаться как к обычному атрибуту.
Подписывайтесь на канал 👉@pythonofff
В объектно-ориентированных языках распространено использование геттеров и сеттеров для безопасной работы с приватными полями. Например, в C# для этого есть удобная конструкция { get; set; }.
В Python геттер реализуется через декоратор @ property, а сеттер в виде @ свойство.setter. В примере метод геттера называется age, поэтому декоратор сеттера – @ age.setter.
Оба метода должны иметь одинаковое название, по которому можно будет обращаться как к обычному атрибуту.
Подписывайтесь на канал 👉@pythonofff
👍4🔥1
Использование с функцией range()
Python range() – одна из встроенных функций. Она используется с циклом for для выполнения блока кода определенное количество раз.
Подписывайтесь на канал 👉@pythonofff
Python range() – одна из встроенных функций. Она используется с циклом for для выполнения блока кода определенное количество раз.
Подписывайтесь на канал 👉@pythonofff
👍1💩1
Дополнение про property
Важно отметить, что property – это класс, реализованный через протокол дескриптора. Его методы setter, getter, deleter и их использование в качестве декораторов – синтаксический сахар.
Конструктор property принимает на вход аргументы fget, fset, fdel, которые должны быть функциями. Они отвечают за получение, установку нового значения и удаление атрибута соответственно.
Простыми словами, в примере property прикрепляет функции get_age и set_age к атрибуту age. Также можно было реализовать условный delete_age, который отвечал бы за удаление атрибута.
Подписывайтесь на канал 👉@pythonofff
Важно отметить, что property – это класс, реализованный через протокол дескриптора. Его методы setter, getter, deleter и их использование в качестве декораторов – синтаксический сахар.
Конструктор property принимает на вход аргументы fget, fset, fdel, которые должны быть функциями. Они отвечают за получение, установку нового значения и удаление атрибута соответственно.
Простыми словами, в примере property прикрепляет функции get_age и set_age к атрибуту age. Также можно было реализовать условный delete_age, который отвечал бы за удаление атрибута.
Подписывайтесь на канал 👉@pythonofff
👍4
Использование цикла for для перебора списка или кортежа
Список и кортеж – повторяемые объекты. Мы можем использовать цикл для перебора их элементов.
Подписывайтесь на канал 👉@pythonofff
Список и кортеж – повторяемые объекты. Мы можем использовать цикл для перебора их элементов.
Подписывайтесь на канал 👉@pythonofff
👍1
Не используйте обработку исключений слишком часто
Обработка исключений может защитить вашу программу от внезапных сбоев. Тем не менее все прекрасно знают, что подобные конструкции могут заметно снизить производительность скрипта.
Не стоит злоупотреблять try-except конструкциями, так как в большинстве случаев можно справиться с задачей, применяя обычные условия. Используйте обработку исключений только в крайних случаях.
На картинке мы привели пример двух случаев необоснованного использования обработки исключений, а также показали более правильную альтернативу.
Подписывайтесь на канал 👉@pythonofff
Обработка исключений может защитить вашу программу от внезапных сбоев. Тем не менее все прекрасно знают, что подобные конструкции могут заметно снизить производительность скрипта.
Не стоит злоупотреблять try-except конструкциями, так как в большинстве случаев можно справиться с задачей, применяя обычные условия. Используйте обработку исключений только в крайних случаях.
На картинке мы привели пример двух случаев необоснованного использования обработки исключений, а также показали более правильную альтернативу.
Подписывайтесь на канал 👉@pythonofff
👍5🤷2
Как вывести отдельные буквы строки?
Строка Python – это последовательность символов. Мы можем использовать цикл for для перебора символов и их печати.
Подписывайтесь на канал 👉@pythonofff
Строка Python – это последовательность символов. Мы можем использовать цикл for для перебора символов и их печати.
Подписывайтесь на канал 👉@pythonofff
👍3💩2
Not a Number
В модуле math есть особый объект, который называется NaN (Not a Number).
Эти объекты NaN не уникальны, и даже не равны самим себе, так что вы можете иметь несколько подобных объектов, взятых из нескольких разных источников.
Например можно создать подобный объект, просто передав строку 'nan' во float. Кстати говоря, это значит что вы можете использовать NaN в качестве ключа в словаре (хотя мы и не советуем это делать).
Подписывайтесь на канал 👉@pythonofff
В модуле math есть особый объект, который называется NaN (Not a Number).
Эти объекты NaN не уникальны, и даже не равны самим себе, так что вы можете иметь несколько подобных объектов, взятых из нескольких разных источников.
Например можно создать подобный объект, просто передав строку 'nan' во float. Кстати говоря, это значит что вы можете использовать NaN в качестве ключа в словаре (хотя мы и не советуем это делать).
Подписывайтесь на канал 👉@pythonofff
👍1
Поиск HTML-элементов по CSS-селектору
С помощью методов select и select_one мы можем использовать некоторые селекторы CSS для поиска элементов.
Подписывайтесь на канал 👉@pythonofff
С помощью методов select и select_one мы можем использовать некоторые селекторы CSS для поиска элементов.
Подписывайтесь на канал 👉@pythonofff
Добавляем классу большую функциональность
Декоратор @ classmethod — это метод, который получает класс в качестве параметра, который принято обозначать как cls. Он указывает на класс ToyClass, а не на объект этого класса.
Методы класса привязаны к самому классу, а не его экземпляру. Они могут менять состояние класса, что отразится на всех объектах этого класса, но не могут менять конкретный объект.
Проще говоря, @ classmethod — это обычный метод класса, имеющий доступ ко всем атрибутам класса, через который он был вызван.
Подписывайтесь на канал 👉@pythonofff
Декоратор @ classmethod — это метод, который получает класс в качестве параметра, который принято обозначать как cls. Он указывает на класс ToyClass, а не на объект этого класса.
Методы класса привязаны к самому классу, а не его экземпляру. Они могут менять состояние класса, что отразится на всех объектах этого класса, но не могут менять конкретный объект.
Проще говоря, @ classmethod — это обычный метод класса, имеющий доступ ко всем атрибутам класса, через который он был вызван.
Подписывайтесь на канал 👉@pythonofff
🔥2❤1
Базовый синтаксис
Мы можем использовать цикл for для перебора списка, кортежа или строк.
Подписывайтесь на канал 👉@pythonofff
Мы можем использовать цикл for для перебора списка, кортежа или строк.
Подписывайтесь на канал 👉@pythonofff
💩2
Создание и использование виртуальной среды
virtualenv — инструмент для создания изолированных сред Python. Программа создает папку, которая содержит все необходимые исполняемые файлы для использования пакетов, необходимых для проекта.
Создание новой виртуальной среды требуется только один раз для каждого проекта, для которого вы хотите изолировать зависимости:
python3 -m venv venv
Это создаст папку venv, содержащую оснастку сценариев и копию python самого двоичного файла. Название папки не имеет значения.
Чтобы активировать виртуальную среду, нужно запустить activate файл: source venv/bin/activate и далее мы можем свободно устанавливать любые зависимости, которые никак не скажутся на работе в будущих проектах.
Подписывайтесь на канал 👉@pythonofff
virtualenv — инструмент для создания изолированных сред Python. Программа создает папку, которая содержит все необходимые исполняемые файлы для использования пакетов, необходимых для проекта.
Создание новой виртуальной среды требуется только один раз для каждого проекта, для которого вы хотите изолировать зависимости:
python3 -m venv venv
Это создаст папку venv, содержащую оснастку сценариев и копию python самого двоичного файла. Название папки не имеет значения.
Чтобы активировать виртуальную среду, нужно запустить activate файл: source venv/bin/activate и далее мы можем свободно устанавливать любые зависимости, которые никак не скажутся на работе в будущих проектах.
Подписывайтесь на канал 👉@pythonofff
Список
Список – это универсальный тип данных, эксклюзивный для Python. В некотором смысле это то же самое, что и массив в C / C ++. Но самое интересное в списке в Python – он может одновременно содержать разные типы данных. Формально список представляет собой упорядоченную последовательность некоторых данных, записанных с использованием квадратных скобок ([]) и запятых (,).
Подписывайтесь на канал 👉@pythonofff
Список – это универсальный тип данных, эксклюзивный для Python. В некотором смысле это то же самое, что и массив в C / C ++. Но самое интересное в списке в Python – он может одновременно содержать разные типы данных. Формально список представляет собой упорядоченную последовательность некоторых данных, записанных с использованием квадратных скобок ([]) и запятых (,).
Подписывайтесь на канал 👉@pythonofff
💩4👍2
Многопоточность
В модуле threading новый поток выполнения может начинаться с нового threading.Thread и присвоения ему функции для выполнения.
Параметр target ссылается на функцию (или вызываемый объект), который будет работать. Нить не начнет выполнение до start, также не будет вызываться Thread объекта.
Когда my_thread завершается, вызов start выкинет исключение RuntimeError. Если вы хотите запустить Thread в фоновом режиме, то передавайте daemon=True или установите my_thread.daemon в True перед вызовом start().
Подписывайтесь на канал 👉@pythonofff
В модуле threading новый поток выполнения может начинаться с нового threading.Thread и присвоения ему функции для выполнения.
Параметр target ссылается на функцию (или вызываемый объект), который будет работать. Нить не начнет выполнение до start, также не будет вызываться Thread объекта.
Когда my_thread завершается, вызов start выкинет исключение RuntimeError. Если вы хотите запустить Thread в фоновом режиме, то передавайте daemon=True или установите my_thread.daemon в True перед вызовом start().
Подписывайтесь на канал 👉@pythonofff
Непрерывная проверка
Поскольку цикл while будет продолжать выполняться до тех пор, пока условие не станет ложным, вы должны убедиться, что это так, иначе программа никогда не завершится.
Иногда это может пригодиться, когда вы хотите, чтобы ваша программа ждала ввода и продолжала непрерывно проверять.
Подписывайтесь на канал 👉@pythonofff
Поскольку цикл while будет продолжать выполняться до тех пор, пока условие не станет ложным, вы должны убедиться, что это так, иначе программа никогда не завершится.
Иногда это может пригодиться, когда вы хотите, чтобы ваша программа ждала ввода и продолжала непрерывно проверять.
Подписывайтесь на канал 👉@pythonofff
💩4
Делегирующие генераторы
Давайте создадим простенькую генераторную функцию subgen, которая будет возвращать числа от 0 до переданного аргумента.
А также ещё одну генераторную функцию delegator, которая будет возвращать числа из итерируемого объекта source, который передадим в качестве аргумента.
Цикл, который можно написать в delegator, можно заменить всего лишь одной строчкой. То есть yield from заменяет цикл for, в котором только возвращаются значения через yield.
Грубо говоря, такая конструкция является неким туннелем передачи данных туда и обратно. В нашей ситуации delegator можно назвать делигирующим генератором, а subgen подгенератором.
Подписывайтесь на канал 👉@pythonofff
Давайте создадим простенькую генераторную функцию subgen, которая будет возвращать числа от 0 до переданного аргумента.
А также ещё одну генераторную функцию delegator, которая будет возвращать числа из итерируемого объекта source, который передадим в качестве аргумента.
Цикл, который можно написать в delegator, можно заменить всего лишь одной строчкой. То есть yield from заменяет цикл for, в котором только возвращаются значения через yield.
Грубо говоря, такая конструкция является неким туннелем передачи данных туда и обратно. В нашей ситуации delegator можно назвать делигирующим генератором, а subgen подгенератором.
Подписывайтесь на канал 👉@pythonofff
👍5
Импорт из другого каталога
Если скрипт, который мы импортируем, находится в том же каталоге, то мы можем импортировать его так же, как и встроенные модули. Однако, если скрипт присутствует в другом каталоге, мы можем использовать библиотеку importlib, чтобы импортировать их как модуль.
Подписывайтесь на канал 👉@pythonofff
Если скрипт, который мы импортируем, находится в том же каталоге, то мы можем импортировать его так же, как и встроенные модули. Однако, если скрипт присутствует в другом каталоге, мы можем использовать библиотеку importlib, чтобы импортировать их как модуль.
Подписывайтесь на канал 👉@pythonofff
💩3👍1