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