Яндекс открывает набор в Летние школы в России, Сербии и Казахстане
Летом 2023 года Яндекс запустит летние школы единовременно в трёх странах по разным направлениям — разработка интерфейсов, мобильная разработка, бэкенд, а также отдельная программа для менеджеров.
В программе онлайн блок с теорией и практика в офисах Яндекса в Москве, Белграде и Алматы. Приятная новость для иногородних студентов: Яндекс оплатит проживание и билеты, а лучшие студенты смогут получить приглашение на работу или на стажировку.
Подайте заявку и узнайте детали на сайте. Обучение стартует в начале лета.
Всем удачи.
Летом 2023 года Яндекс запустит летние школы единовременно в трёх странах по разным направлениям — разработка интерфейсов, мобильная разработка, бэкенд, а также отдельная программа для менеджеров.
В программе онлайн блок с теорией и практика в офисах Яндекса в Москве, Белграде и Алматы. Приятная новость для иногородних студентов: Яндекс оплатит проживание и билеты, а лучшие студенты смогут получить приглашение на работу или на стажировку.
Подайте заявку и узнайте детали на сайте. Обучение стартует в начале лета.
Всем удачи.
Функция reduce
Модуль
Таким образом, в примере выше
#функции #reduce
Модуль
functools
позволяет хорошо раскрыть функциональные возможности Python. Например, в functools
есть интересная функция reduce
, которая позволяет «сжимать» данные, применяя последовательно функцию и запоминая результат.Таким образом, в примере выше
reduce
умножает 1 на 2, затем результат этого умножения на 3 и так далее.#функции #reduce
Лимит рекурсии
В Python не поддерживается хвостовая рекурсия, из-за чего зачастую возникает
Однако делать это слегка опасно, так как каждый новый вызов занимает достаточно много памяти. И вообще лучше стараться использовать не рекурсию, а обычные циклы.
#рекурсия #sys
В Python не поддерживается хвостовая рекурсия, из-за чего зачастую возникает
RecursionError
во время создания рекурсивных алгоритмов. Но с помощью модуля sys
можно посмотреть и даже изменить максимальную глубину рекурсии. Однако делать это слегка опасно, так как каждый новый вызов занимает достаточно много памяти. И вообще лучше стараться использовать не рекурсию, а обычные циклы.
#рекурсия #sys
Инкремент с помощью __pos__
В Python нет операции инкремента
При применении унарного плюса у объекта вызывается магический метод
Код на картинке может показаться сначала немного сложным, но лучше проследить логику и понять работу метода
#магические_методы #__pos__
В Python нет операции инкремента
++
как в си-подобных языках, поэтому используется x += 1
. Однако запись ++x
является валидным кодом (но не x++
), так как это просто два унарных оператора сложения.При применении унарного плюса у объекта вызывается магический метод
__pos__
, то есть запись ++x
можно понять как x.__pos__().__pos__()
. Зная это, можно реализовать класс, который будет представлять число и поддерживать поведение инкремента.Код на картинке может показаться сначала немного сложным, но лучше проследить логику и понять работу метода
__pos__
. Если реализовать все остальные необходимо магические методы, то может получится полноценный класс числа, но в продакшне такие приколы лучше не писать.#магические_методы #__pos__
Дробные числа
По умолчанию числа с плавающей точкой используют память привычным образом, то есть они хранятся в двоичном виде. Это означает, что вы обычно работаете с приблизительными значениями, а не точными.
Можно использовать тип данных
Поэтому для идеальных вычислений лучше использовать
#числа #fraction
По умолчанию числа с плавающей точкой используют память привычным образом, то есть они хранятся в двоичном виде. Это означает, что вы обычно работаете с приблизительными значениями, а не точными.
Можно использовать тип данных
Decimal
, который предоставит намного большую точность, но и его может не хватить в некоторых случаях. Поэтому для идеальных вычислений лучше использовать
Fraction
, который представляет и хранит число в виде рациональной дроби.#числа #fraction
Наследование
Наследование позволяет создавать новый класс на основе уже существующего. Таким образом, можно создать новый класс, взяв за основу все методы и атрибуты другого.
В данном случае класс
Наследование классов нужно для изменения поведения конкретного класса, а также для расширения его функционала.
#классы #ооп
Наследование позволяет создавать новый класс на основе уже существующего. Таким образом, можно создать новый класс, взяв за основу все методы и атрибуты другого.
В данном случае класс
Person
является родительским классом, также его называют базовым классом или суперклассом. А класс Employee
называется дочерним классом или подклассом.Наследование классов нужно для изменения поведения конкретного класса, а также для расширения его функционала.
#классы #ооп
Дескрипторы
Дескриптор – это атрибут объекта со “связанным поведением”, то есть такой атрибут, при доступе к которому его поведение переопределяется методом протокола дескриптора. Если хотя бы один из этих методов определен в объекте, то можно сказать, что этот метод – дескриптор.
Для того, чтобы определить свой собственный дескриптор, обычно определяют три специальных метода класса
У данного объекта будет переопределено поведение при доступе к атрибуту (
#классы #дескрипторы
Дескриптор – это атрибут объекта со “связанным поведением”, то есть такой атрибут, при доступе к которому его поведение переопределяется методом протокола дескриптора. Если хотя бы один из этих методов определен в объекте, то можно сказать, что этот метод – дескриптор.
Для того, чтобы определить свой собственный дескриптор, обычно определяют три специальных метода класса
__get__
, __set__
или __delete__
. После этого можно создать новый класс и в атрибут этого класса записать объект типа дескриптор.У данного объекта будет переопределено поведение при доступе к атрибуту (
__get__
), при присваивании значений (__set__
) или при удалении (__delete__
).#классы #дескрипторы
Создание дочернего процесса
Метод
Кстати, получается интересный случай, в коде примера выполняется и блок
#os #fork #процессы
Метод
os.fork()
создаёт дочерний процесс в том же месте кода, вызывая системную функцию fork()
, и возвращает PID (Process Identifier), который равен PID дочернего процесса в родительском процессе и нулю в новом.Кстати, получается интересный случай, в коде примера выполняется и блок
if
, и else
. Если не знать про os.fork()
и посмотреть вывод подобного кода, то возникнет много вопросов.#os #fork #процессы
Ускоряем код с помощью векторизации
Одним из приемов для ускорения работы циклов является векторизация вычислений, т. е. использование функций, которые поддерживают операции над векторами.
Вообще лучший способ ускорить любой цикл – это отказаться от него. В примере выше для работы с функцией
По сути,
#vectorize #numpy
Одним из приемов для ускорения работы циклов является векторизация вычислений, т. е. использование функций, которые поддерживают операции над векторами.
Вообще лучший способ ускорить любой цикл – это отказаться от него. В примере выше для работы с функцией
my_func
мы могли бы вызвать ее в цикле для каждого элемента списка, но гораздо проще использовать vectorize
.По сути,
vectorize
преобразует функцию таким образом, что она начинает принимать весь вектор целиком, а не отдельный его элемент. Надо помнить, что такой подход не всегда приводит к значительному ускорению.#vectorize #numpy
Прочитать произвольную строку из файла
Предположим, вы решили разработать чат-бота. В нем конечно же будет с десяток самых крутых и полезных функций, может быть даже в нем будет модные нынче нейросети.
И конечно же не обошлось без приветствия, вы специально заготовили несколько различных вариантов в файле
Чтобы вывести это на экран, может помочь функция
#linecache #file
Предположим, вы решили разработать чат-бота. В нем конечно же будет с десяток самых крутых и полезных функций, может быть даже в нем будет модные нынче нейросети.
И конечно же не обошлось без приветствия, вы специально заготовили несколько различных вариантов в файле
text.txt
:Приветствую!
Здравствуйте!
Ку, здарова.
Добрый день!
Привет!
Чтобы вывести это на экран, может помочь функция
getline
из модуля linecache
. В чем главное отличие этой функции от обычного метода чтения из файла? Функция getline
кеширует все строчки файла в списке, так что следующие вызовы get_answer
отработают моментально.#linecache #file
Скачиваем видео с YouTube
Пакет
Для работы нам необходимо создать объект класса YouTube. Помимо ссылки на видео в конструктор можно передать в качестве параметров функции для обработки прогресса загрузки и завершения.
Большинство видео на ютубе не имеют аудиодорожки на потоках с высоким разрешением, свыше 720p — это связано с технологией передачи DASH, которую использует ютьюб. Решение данной проблемы покажем в следующем посте.
На картинке мы показали как отфильтровать потоки с прогрессивной передачей и выбрать из полученного списка с максимальным доступным разрешением до 720p.
Для загрузки выбранного потока используем функцию
#youtube
Пакет
pytube
предоставляет всю небходимую функциональность для скачивания видео с YouTube, а также для сбора всей информации о нем.Для работы нам необходимо создать объект класса YouTube. Помимо ссылки на видео в конструктор можно передать в качестве параметров функции для обработки прогресса загрузки и завершения.
Большинство видео на ютубе не имеют аудиодорожки на потоках с высоким разрешением, свыше 720p — это связано с технологией передачи DASH, которую использует ютьюб. Решение данной проблемы покажем в следующем посте.
На картинке мы показали как отфильтровать потоки с прогрессивной передачей и выбрать из полученного списка с максимальным доступным разрешением до 720p.
Для загрузки выбранного потока используем функцию
download()
, в функцию можно передать в качестве параметров путь до директории для сохранения и имя файла.#youtube
Создаем виртуальное окружение
Виртуальное окружение — это изолированная среда, которая имеет свои локальные интерпретатор и пакеты, независимые от глобального интерпретатора и других окружений.
В стандартной библиотеке Python третьей версии есть пакет
Скрипт
В случае успешного создания и активации у вас в терминале должно появится название вашего виртуального окружения в круглых скобках.
#venv
Виртуальное окружение — это изолированная среда, которая имеет свои локальные интерпретатор и пакеты, независимые от глобального интерпретатора и других окружений.
В стандартной библиотеке Python третьей версии есть пакет
venv
, который позволяет создавать виртуальные окружения удобно и быстро. Пример представлен на картинке. Скрипт
activate
в директории bin
предназначен для активации окружения, а команда deactivate
в уже активированном окружении — для выхода из него.В случае успешного создания и активации у вас в терминале должно появится название вашего виртуального окружения в круглых скобках.
#venv
Курс и конвертер валют в Python
Для работы с разными валютами и их курсами существует библиотека forex-python.
С её помощью можно как узнать курс любой валюты, так и сконвертировать одну валюту в другую.
Ознакомиться с интерактивным примером кода можно тут.
#currency #forex_python
Для работы с разными валютами и их курсами существует библиотека forex-python.
С её помощью можно как узнать курс любой валюты, так и сконвертировать одну валюту в другую.
Ознакомиться с интерактивным примером кода можно тут.
#currency #forex_python
Что означает self в методах
При вызове методов у объектов сам объект передается первым аргументом, если это не статический метод. И такой аргумент принято называть
И к счастью, все это происходит автоматически — вручную объект передавать не надо. Но для того, чтобы понять этот момент лучше, можно вызвать метод напрямую у класса и явно передать объект (пример на картинке).
Далее, уже внутри метода можно обращаться к атрибутам и другим методам у объекта. Для этого он и передается.
Проще говоря, если откинуть все технические детали, то можно сказать следующее:
#классы
При вызове методов у объектов сам объект передается первым аргументом, если это не статический метод. И такой аргумент принято называть
self
, который новички прописывают в классах, даже не задумываясь о его значении. И к счастью, все это происходит автоматически — вручную объект передавать не надо. Но для того, чтобы понять этот момент лучше, можно вызвать метод напрямую у класса и явно передать объект (пример на картинке).
Далее, уже внутри метода можно обращаться к атрибутам и другим методам у объекта. Для этого он и передается.
Проще говоря, если откинуть все технические детали, то можно сказать следующее:
self
указывает, что мы как бы применяем метод к самому объекту. #классы
Завершение программы
Функция
По факту функция просто поднимают исключение
Использовать
#sys #exit
Функция
exit
создана для удобства работы в интерактивном режиме, однако не рекомендуется использовать её внутри скриптов. По факту функция просто поднимают исключение
SystemExit
. А при попытке вызова без скобок напишут подсказку о правильном способе выхода из интерпретатора.Использовать
sys.exit()
стоит потому, что этот метод лежит в стандартном модуле и всегда там доступен. Также это довольно явный способ завершения программы.#sys #exit
Ускоряем код с помощью векторизации
Одним из приемов для ускорения работы циклов является векторизация вычислений, т. е. использование функций, которые поддерживают операции над векторами.
Вообще лучший способ ускорить любой цикл – это отказаться от него. В примере выше для работы с функцией
По сути,
#vectorize #numpy
Одним из приемов для ускорения работы циклов является векторизация вычислений, т. е. использование функций, которые поддерживают операции над векторами.
Вообще лучший способ ускорить любой цикл – это отказаться от него. В примере выше для работы с функцией
my_func
мы могли бы вызвать ее в цикле для каждого элемента списка, но гораздо проще использовать vectorize
.По сути,
vectorize
преобразует функцию таким образом, что она начинает принимать весь вектор целиком, а не отдельный его элемент. Надо помнить, что такой подход не всегда приводит к значительному ускорению.#vectorize #numpy