yield from
Бытует мнение, что
Однако истинное предназначение немного в другом. Конструкция позволяет «вкладывать» один генератор в другой, то есть создавать субгенераторы.
Бытует мнение, что
yield from
был добавлен в Python 3, чтобы объединить две конструкции: yield
и цикл for
, потому что они часто используются совместно, как в примере(на картинке слева).Однако истинное предназначение немного в другом. Конструкция позволяет «вкладывать» один генератор в другой, то есть создавать субгенераторы.
yield from
позволяет программисту легко управлять сразу несколькими генераторами, настраивать их взаимодействие и, конечно, заменить более длинную конструкцию for
+yield
Как видно из примера, yield from
позволяет одному генератору получать значения из другого. Этот инструмент сильно упрощает жизнь программиста, особенно при асинхронном программировании.Ключевое слово None представляет собой константу языка
В этом коде приведено несколько примеров типа данных
Python
и означает отсутствие значения. В других языках программирования, например Java
, вместо него используется значение null
. Однако null
часто вызывает путаницу, особенно у начинающих программистов, считающих, что оно равно целочисленному значению 0 . Поэтому в языке Python
используется ключевое слово None
, как показано в примере, чтобы четко обозначить его отличие от числового значения 0, пустого списка и пустой строки. Любопытно, что значение None
— единственное значение в типе данных NoneType
.В этом коде приведено несколько примеров типа данных
None
(а также показано, чем он не является). Если не указать для функции возвращаемое значение, то по умолчанию будет возвращаться None
.Функция getsizeof()
Модуль sys стандартной библиотеки предоставляет функцию getsizeof(). Эта функция принимает объект (объект может быть любого типа), вызывает метод
Сегодня эту функцию испытаем на числах.
Модуль sys стандартной библиотеки предоставляет функцию getsizeof(). Эта функция принимает объект (объект может быть любого типа), вызывает метод
sizeof()
и возвращает размер объекта в байтах, поэтому вы также можете сделать ваши объекты инспектируемыми.Сегодня эту функцию испытаем на числах.
Размещайте метод __init__ в самом начале
Хотя для большинства из нас это правило очевидно, но встречаются программисты, которые “прячут”
При наличии атрибутов класса метод
Хотя для большинства из нас это правило очевидно, но встречаются программисты, которые “прячут”
__init__
глубоко в теле класса с другими атрибутами. Располагать же его следует в самом начале класса до упоминания всех остальных методов, поскольку именно там его будут искать при чтении.При наличии атрибутов класса метод
__init__
размещается после них. Во избежание путаницы этого принципа следует последовательно придерживаться при определении всех классов проекта.Почему Python медленно работает?
В первую очередь причиной медленной работы Python является его динамическая природа и универсальность. Его можно использовать в качестве инструмента для решения самых разнообразных задач, хотя при этом зачастую будут доступны более оптимальные и быстрые альтернативы.
Тем не менее, всегда есть способы оптимизировать ваши приложения на Python с помощью асинхронности, инструментов профилирования и использования нескольких интерпретаторов. А для приложений, где время запуска неважно будет полезен JIT-компилятор, и соответственно интерпретатор PyPy. Для тех же частей вашего кода, где производительность критична и у вас при этом имеется много статически типизированных переменных, в качестве наиболее оптимального варианта может стать использование Cython.
В первую очередь причиной медленной работы Python является его динамическая природа и универсальность. Его можно использовать в качестве инструмента для решения самых разнообразных задач, хотя при этом зачастую будут доступны более оптимальные и быстрые альтернативы.
Тем не менее, всегда есть способы оптимизировать ваши приложения на Python с помощью асинхронности, инструментов профилирования и использования нескольких интерпретаторов. А для приложений, где время запуска неважно будет полезен JIT-компилятор, и соответственно интерпретатор PyPy. Для тех же частей вашего кода, где производительность критична и у вас при этом имеется много статически типизированных переменных, в качестве наиболее оптимального варианта может стать использование Cython.
Слабые ссылки
Слабые ссылки позволяют получать доступ к объекту, как и обычные, однако, так сказать, они не учитываются в механизме подсчета ссылок. Другими словами, слабые ссылки не могут поддерживать объект живым, если на него не осталось больше сильных ссылок.
Согласно документации, слабые ссылки нужны для организации кэшей и хэш-таблиц из «тяжелых» объектов, когда не требуется поддерживать объект живым только силами этого самого кэша; чтобы в долгоживущей программе не кончалась память из-за хранения в кэшах большого количества уже не нужных объектов.
Встроенный модуль weakref отвечает за функциональность слабых ссылок.
Слабые ссылки позволяют получать доступ к объекту, как и обычные, однако, так сказать, они не учитываются в механизме подсчета ссылок. Другими словами, слабые ссылки не могут поддерживать объект живым, если на него не осталось больше сильных ссылок.
Согласно документации, слабые ссылки нужны для организации кэшей и хэш-таблиц из «тяжелых» объектов, когда не требуется поддерживать объект живым только силами этого самого кэша; чтобы в долгоживущей программе не кончалась память из-за хранения в кэшах большого количества уже не нужных объектов.
Встроенный модуль weakref отвечает за функциональность слабых ссылок.
This media is not supported in your browser
VIEW IN TELEGRAM
Просмотр видео в терминале
Установка пакета:
video-to-ascii
это питоновский пакет, который даёт возможность просматривать видео в терминале, используя таблицу ASCII.Установка пакета:
pip3 install video-to-ascii
Чтобы запустить видео пропишите слудующую команду:video-to-ascii -f название_видео.mp4
match/case в Python 3.10
Часто приходится проверять не только тип данных, но и количество, что приводит к появлению огромного числа веток
Часто приходится проверять не только тип данных, но и количество, что приводит к появлению огромного числа веток
if/else
с вызовом функций isinstance
, len
и обращению к элементам по индексу, ключу или атрибуту. Именно для упрощения работы и уменьшения if/else
был введен новый оператор match/case
.Match/case
сам решает проблему с проверкой типов данных, с проверкой значений и их количеством, что позволяет упростить логику и увеличить читаемость кода. И очень удобно, что можно объявлять переменные и помещать в них значения прямо в ветке case
без использования моржового оператора.Метаклассы в Python
Предположим, что вы знаете разницу между классами и объектами. Тогда метаклассы не должны быть для вас слишком уж сложными. Если кратко, то они являются классами для классов (отсюда и «мета» в их названии).
Проще говоря, в то время как классы являются чертежами для объектов, метаклассы являются чертежами для классов. Класс является описанием, когда мы создаем его экземпляр, тогда как метакласс является описанием класса, и существует только когда определен класс.
Самая простая реализация метакласса, которая ничего не делает, выглядит следующим образом👆
Предположим, что вы знаете разницу между классами и объектами. Тогда метаклассы не должны быть для вас слишком уж сложными. Если кратко, то они являются классами для классов (отсюда и «мета» в их названии).
Проще говоря, в то время как классы являются чертежами для объектов, метаклассы являются чертежами для классов. Класс является описанием, когда мы создаем его экземпляр, тогда как метакласс является описанием класса, и существует только когда определен класс.
Самая простая реализация метакласса, которая ничего не делает, выглядит следующим образом👆
Форматирование текста
Модуль textwrap может использоваться для форматирования текста в ситуациях, когда требуется красивая печать. Он предлагает функциональность, аналогичную функциям заполнения абзацев, которые можно найти во многих текстовых редакторах и текстовых процессорах.
Модуль textwrap может использоваться для форматирования текста в ситуациях, когда требуется красивая печать. Он предлагает функциональность, аналогичную функциям заполнения абзацев, которые можно найти во многих текстовых редакторах и текстовых процессорах.