Почему вставка кода уровня модуля в функцию, а затем вызов функции быстрее в Python? - PullRequest
6 голосов
/ 08 ноября 2011

В ответе Алекса Мартелли на Создание объектно-ориентированного сценария Python он упоминает, что помещение кода уровня модуля в функцию и последующий вызов функции происходит быстрее в Python. Может кто-нибудь объяснить, почему и верно ли это для всех реализаций Python?

1 Ответ

8 голосов
/ 08 ноября 2011

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

Обратите внимание, что в Python 2.x присутствие оператора exec внутри функции деактивирует эту оптимизацию, поскольку имена больше не могут быть определены статически. В Python 3.x exec() является обычной функцией, и поэтому не разрешено изменять переменные в локальной области видимости.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...