Обзор
Python использует множество методов для оптимизации вашего кода во время компиляции и выполнения, чтобы он работал быстрее и использовал меньше памяти во время выполнения.
Стажировка
Одним из основных методов, используемых Python, является Интернирование. Интернирование — это процесс повторного использования объектов по требованию. Python кэширует определенные объекты во время выполнения.
Целое стажировка
При запуске Python предварительно загружает (кэширует) глобальный список целых чисел в диапазоне от -5 до 256. Каждый раз, когда вы ссылаетесь/используете целое число в этом диапазоне, Python будет использовать кэшированную версию этого объекта. Вы можете доказать это, присвоив одно и то же целое число двум разным переменным и проверив их идентификатор с помощью функции id().
a = 10 b = 10 print(id(a)) 139815520299040 print(id(b)) 139815520299040
Целые числа в диапазоне от -5 до 256 являются одиночными объектами. Одноэлементные объекты могут быть созданы только один раз, поэтому, когда вы создаете их повторно, вы получаете обратно ту же версию объекта.
Стажировка строки
Некоторые строки интернированы python, но не все. По мере компиляции кода Python идентификаторы интернируются. Идентификаторы включают: имена переменных, имена функций, имена классов и т. д. В основном любая строка, похожая на идентификатор, будет интернирована. Бывший. hello_world.
Причина, по которой Python выполняет интернирование строк, заключается в более быстром поиске. Python (внутри и в коде, который вы пишете) имеет дело с большим количеством поисковых запросов типа словаря по строковым ключам, что означает много тестов String Equality.
a = 'test' b = 'test' a == b
Используя оператор равенства ==, Python должен сравнивать строки посимвольно. Однако, если строка была интернирована, то a и b указывают на одно и то же место в памяти,поэтому вместо этого вы можете сравнить их с помощью оператора is, что намного быстрее .
a is b
Глазок Оптимизация
Оптимизация Peephole происходит во время компиляции и касается в основном константных выражений и членства в наборе.
Постоянные выражения – это числовые вычисления, например 24X6
. Python будет предварительно вычислять это на этапе компиляции, сохраняя результат постоянного выражения в памяти, поэтому вычисление не нужно выполнять снова и снова.
Изменяемое становится неизменяемым
Во время компиляции Python возьмет короткие последовательности длиной менее 20 и преобразует их в их неизменяемые аналоги. Это делает поиск в коротких последовательностях намного быстрее, так как их неизменяемая часть работает как словарь, а поиск в словаре происходит намного быстрее. Сюда входят списки, строки и кортежи.
Это также относится к любым коротким последовательностям, которые являются частью Тесты на членство.
if e in [1,2,3]: print('hello')
В этом случае [1,2,3]
становится константным выражением и преобразуется из списка в кортеж(1,2,3)
. Если бы это был набор (1,2,3)
, он был бы преобразован в замороженный набор.