Я читал о интерпретаторе Python, потому что я не мог понять, почему некоторые вещи имели скомпилированные объекты Python (.pyc), а другие нет.
Я получил ответ на свой вопрос,но сейчас я в замешательстве.Итак, интерпретатор компилирует скрипт в модуль ... который "как бы" похож на объект в C, если я правильно понимаю (программист C здесь, новичок в Python) - или я думаю, больше как .classв Java, поскольку он скомпилирован байт-кодом, а не нативными инструкциями ... в любом случае он делает это, когда вы либо импортируете скрипт, ИЛИ если вы явно вызываете его для компиляции (что по какой-то причине менее выгодно).при этом понимании, есть ли разница во времени выполнения между скомпилированным байт-кодом и нет?Предполагая, что имеется только один интерпретатор (интерпретатор байт-кода), это будет означать, что если модуль еще не скомпилирован, он должен выполнить грамматику / лексирование / синтаксический анализ (компиляцию) непосредственно перед выполнением интерпретации.Не приведет ли это к увеличению времени выполнения?
Так что, если вы примете приведенное выше, то, очевидно, будет лучше, если модули скомпилированы в .pyc, а не запускаются как стандартный скрипт .py наfly.
Значит ли это, что в вашем основном прогоне лучше иметь как можно меньше исполнений?
Я бы подумал, если у вашей точки входа есть какая-то хардкорная логика (т.е. у меня есть параобход дерева и другие тяжелые сравнения), разве эта точка входа сама по себе не должна быть обернута так, чтобы она была скомпилирована?
То есть вместо:
# file.py:
def main():
<stuff goes here - setup, whatever shared resources different modules need, etc.>
main()
Было бы лучшесделать:
# wrapper.py:
from file.py import *
main()
Надеюсь, я объяснил, что я спрашиваю, достаточно хорошо.Вполне возможно, что я неправильно понял, как интерпретатор / компилятор используется в Python, и этот вопрос даже не разумно задавать - я совершенно новичок в Python.
TIA