Рубрики
Без рубрики

Как работает программа Python?

Прежде чем прыгать в то, как Python работает внутри внутренне, давайте посмотрим разницу между компилятором и в … Теги с Python, Computerscience, CodeNewie.

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

Из Википедии:

«Компилятор – это компьютерная программа, которая переводит компьютерный код, написан на одном языке программирования (исходный язык) на другой язык (целевой язык). Компилятор имени используется в основном для программ, которые переводят исходный код с языка программирования высокого уровня на язык более низкого уровня (например, язык сборки, объектный код или машинный код) для создания исполняемой программы ».

Итак, компилятор – это программное обеспечение, которое займет ваш код, написанный на уровне высокого уровня и выполняет некоторую магию и преобразует его на низкоуровневый язык, который ваш процессор поймет и выполняет. Скомпилированные двоичные файлы быстрее, так как компилятор не нуждается в вариантах двоичных файлов каждый раз. Вы можете выполнить его напрямую.

Обычно скомпилированные двоичные файлы не могут работать на разных операционных системах, это недостаток. Хотя есть способы и имеются различные перекрестные компиляторы, которые являются решением для этого ограничения. Я не буду подробно быть подробно, так как компиляционный не в теме этого блога.

Из Википедии:

” В информатике, интерпретатор – это компьютерная программа, которая непосредственно выполняет инструкции, написанные на языке программирования или сценариев, не требуя их ранее, чтобы быть скомпилированы в программу машинного языка ».

Итак, это означает, что интерпретатор не будет обработать ваш код перед выполнением. Как только вы запускаете программу, она начнет выполнять строку кода по строке, начиная с строки номера 1. Выполняя свой код, если он получает некоторую ошибку синтаксиса в любом номере строки «N», он остановит выполнение и дает ошибку. Итак, программа будет работать до линии «N-1», которая не является случай с компиляторами. Компилятор проверяет синтаксис и правило языка и преобразует ваш код на языке машины, прежде чем он начнет выполнять выполнение.

Переводчик Python – это программа программы, которая выполняет другие программы. Это слой программного обеспечения логики между вашим кодом и машиной. Он может быть реализован в C, Java и т. Д. В зависимости от аромата Python, который вы используете.

Давайте проверим, что произойдет в Python.

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

Когда вы выполняете программу, сначала компилирует ваш сложный логический код в формат, известный как Байтовый код Отказ Переводчик Python затем обрабатывает этот байтовый код и выполнять инструкцию один за другим.

Байтовый код:

Компиляция представляет собой шаг перевода и код байтового кода, сгенерированный на этом этапе, является низким уровнем, независимое на платформе, независимое на платформе. Представление вашей сложной логики. Этот байтовый код может работать быстрее, чем ваш код.

Python хранит код байта вашей программы в файлах с расширением .пью (.Pyc означает собрание .py источник) Отказ

n Python 2.x, код байта был создан в том же месте, где ваш исходный файл, но с 3.2 внутрь, он сохраняется в подкаталоге с именем Pycache Расположен в том же каталоге, где ваш сложный код и в файлах, имена которых определяют версию Python, которая создала этот байтовый код.

test.cpython-38.pyc.

Это имя файла файла байта образца, которое имеет имя исходного файла в качестве первой части. Вторая часть – тип интерпретатора и версия Python. В этом примере код байта создан с использованием Cpython и Python версия 3,8 (номер 38 в имени файла), а третья часть – расширение файла кода BYTE.

Новый Pycache Подкаталог помогает избежать зависимости от беспорядка и соглашения об именах для байтового кода предотвращает разные версии Python, установленные из перезаписи одного другого байтового кода.

Итак, давайте суммируемся, как генерируются байтовые коды:

  • Python проверяет последние модифицированные временные метки источника и байтового кода, чтобы узнать, необходимо ли Code Recompile.

  • Python Check, чтобы узнать, необходимо ли перекомпилировать файл, это версия Python изменяется, используя номер версии «Magic» в сам файле кода байтов в 3.2 и ранее, либо информация, присутствующая в файлах файлов байта в 3.2, а затем.

  • Результатом является то, что оба изменения исходного кода, и различные номера версий Python будут запускают новый файл кода байтов.

Если Python не может написать файлы кода байтов на вашем компьютере, ваши программы все еще работают. Код байта генерируется в памяти и отбрасывается на выходе программы.

Python будет выполнять ваш код, если находит действительный код байта вашей программы. Неважно, если ваш исходный код присутствует или нет.

Это этап, в которой генерируются все ошибки синтаксиса/отступа.

Имейте в виду, что код байта сохраняется в файлах только для импортированных файлов, а не для файлов верхнего уровня программы, которая выполняется только в качестве скриптов. Это Оптимизация импорта сделано в Python.

То, что это значит, если ваш сценарий не импортирует какой-либо файл, код байта не будет сохранен на компьютере, но он будет сгенерирован в памяти.

Давайте моделируем это. Давайте напишем 3 маленьких файла сценария. test1.py:

import test2

test2.py:

import test3
print("Namaste world!!!")
test3.foo()

test3.py:

def foo():
 if 1:
  print("Namaste world from Foo!!!")
 print("Namaste world from Foo - 1!!!")

У нас есть 3 файла в нашем каталоге. Давайте запустим это, как посмотри, что происходит.

На успешном запуске он будет генерировать подпапку Pycache здесь. Но что там в этом каталоге?

Вы можете четко видеть, переводчик Python скомпилировал наш код и сгенерированный байтовый код для Test2.py и test3.py. Без байтового кода не создается для Test1.py, так как он является основным сценарием.

Надеюсь, теперь понятно, что файлы кодов байтов сохраняются для файлов, которые импортируются в ваш скрипт.

Но все же, если вы хотите сохранить файл кода байтов для вашего скрипта. Вам придется написать небольшой сценарий для компиляции вашей основной программы. Добавьте этот код в Test.py. Замените файл сценария вместо Test4.py.

test.py:

import py_compile
py_compile.compile('test4.py')

test4.py:

def foo():
 if 1:
 print("Namaste world from Foo!!!")
 print("Namaste world from Foo - 1!!!")

foo()

Когда вы запускаете этот сценарий компиляции, он будет сознавать ваш главный скрипт и сохранить код байта в Pycache подкаталог. Вы можете запустить этот файл байтового кода.

Как только ваша программа была скомпилирована в байтовый код либо в файле, либо в памяти, он переадресован в Виртуальная машина Python (PVM) Отказ

Виртуальная машина Python:

Ref: Обучение Python by Mark Lutz (5-е издание)

Virtual Machine Python – это большой код, который итерации по поводу вашего байтового кода и выполняет каждую инструкцию один на один на вашем компьютере. Это двигатель времени выполнения, который всегда присутствует как часть Python. PVM – это тот, который запускает ваш код на машине. Python разработан таким образом, чтобы скрыть все эти сложности от Python Programmer.

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

Нижняя строка, в отличие от классического интерпретатора, в Python все еще есть внутренняя компиляция.

Ошибки времени выполнения генерируются на этом этапе.

* Переводчик Python проверяет интервал от времени вашего файла кода сценариев и байтов. Если есть какие-либо изменения в Timestamp, он перекомпилируй скрипт.

* Он прочитает вашу строку скрипта по строке и преобразует его в Bytecode и сохраняет в качестве файла кода байтов в Pycache. каталог. Если есть несколько импортированных файлов, он будет генерировать файл кода байта для каждого импортированного файла. На этом этапе генерируются синтаксические ошибки.

* Загрузите этот файл байта кода в память и отправьте его в PVM. PVM будет петлен по байтовому коду и выполнить каждую инструкцию. Это шаг, в котором все ошибки выполнения создаются в вашем коде.

В моем будущем блоге я буду допустить глубже в байтовый код, и мы будем играть с ним.

Оригинал: “https://dev.to/jhadheeraj1986/how-does-a-python-program-run-3gg0”