Может ли python оптимизировать чрезмерное связывание имен? - PullRequest
0 голосов
/ 10 января 2019

Может ли компилятор python оптимизировать удаление ненужных имен? Например, может ли функция определиться как:

def add_one(x):
    a = x
    b = a
    c = b
    d = c
    e = d
    f = e
    g = f
    return g + 1

быть оптимизировано до

def add_one(x):
    return x + 1

1 Ответ

0 голосов
/ 10 января 2019

Нет, Python не может оптимизировать этот случай, потому что Python является высокодинамичным языком, имена могут иметь значение во время выполнения, которое оптимизатор не может предсказать или объяснить. Функции проверки Python позволяют вам получать эти имена, например, во время выполнения.

Хотя это может показаться надуманным в вашем сконструированном и маловероятном сценарии, в других, более сложных случаях назначение псевдонима имени, которое затем используется для самонаблюдения или иного доступа при обращении к другой функции, не является неслыханным. Например, zope.exceptions библиотека ищет __traceback_info__ локальных объектов в стеке в случае обратной трассировки. Вы не хотели бы, чтобы компилятор оптимизировал эти «бесполезные» назначения.

Существует намного больше таких сценариев, которые делают оптимизацию кода Python гораздо более сложной, чем большинство разработчиков.

...