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