Что такое интерпретатор python
Перейти к содержимому

Что такое интерпретатор python

  • автор:

Что такое интерпретатор

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

  • Зачем нужен интерпретатор
  • Экскурс в историю
  • Пример интерпретатора Python
  • Пример интерпретатора JavaScript
  • Выполнение программы
  • Устройство интерпретатора
  • Достоинства и недостатки
  • Выводы и рекомендации

Зачем нужен интерпретатор

В переводе с английского языка компьютер — вычислитель. Мы привыкли пользоваться компьютером для подготовки документов, чтения новостей и просмотра фильмов. В повседневной жизни производить вычисления приходится крайне редко, поэтому такое определение может показаться странным.

Вместе с тем, это название очень точно отражает природу компьютера. Мы этого не видим, но на самом деле компьютер умеет работать только с числами: документы, и новости, и фильмы выглядят для компьютера как наборы чисел. То же самое касается программ, которые он выполняет.

Каждая команда имеет свой числовой — машинный — код: благодаря ему компьютер без труда понимает, что нужно делать. Человеку трудно писать программы в машинных кодах, однако на заре компьютерной эры программисты писали именно так. Вот так выглядели их программы:

102 184 0 0 102 185 100 0 102 1 200 102 73 102 131 249 0 117 245 

Пытаясь облегчить себе работу, программисты придумали языки программирования: они понятнее человеку, поэтому писать программы на них проще. На этом этапе возникла проблема: если компьютер понимает команды только в виде чисел, как он будет выполнять команды, написанные на языке программирования?

Есть два вида программ, которые помогают решить эту проблему — интерпретаторы и компиляторы. Про компилятор можно почитать здесь, в этом тексте мы остановимся только на интерпретаторах.

Вкратце, интерпретатор — это программа, которая выполняет команды, написанные на каком-то языке программирования. Например, интерпретатор Python понимает команды языка Python, а интерпретатор JavaScript — команды языка JavaScript.

Экскурс в историю

Lisp оказался удачным изобретением. За прошедшие годы люди изобрели множество языков, которые оказались никому не нужны. Этого нельзя сказать о Lisp, который развивается до сих пор. Уточню, что разработкой интерпретаторов Lisp занимались разные команды, поэтому у них получались разные версии языка. Такие версии языка называют диалектами. Кроме Emacs Lisp, вы могли слышать о ClojureScript — диалекте LISP, который иногда используют вместо JavaScript при разработке фронтенда

Рассмотрим пример программы на Lisp для понимания разницы между машинным кодом и «почти человеческим языком»:

(defun sum (n) (if (= n 0) 0 (+ n (sum (- n 1))))) (sum 100) 

Необязательно знать Lisp, чтобы увидеть, что в программе есть структура, и понять отдельные ее части. Доступность для понимания — выгодное преимущество языков программирования перед машинным кодом.

Есть интерпретаторы для таких популярных языков программирования, как Python и JavaScript. Они хорошо подходят и для работы, и для изучения программирования. Важную роль в этом играет то, что для них существует интерпретаторы, и чуть позже мы узнаем, почему это так.

Пример интерпретатора Python

Разберем в деталях работу интерпретатора — для этого напишем несложную программу, которая будет вычислять суммы чисел от 1 до 100:

sum = 0 for i in range(1, 101): sum = sum + i print(sum) # => 5050 

Запустим интерпретатор python и построчно введем программу.

Пример работы интерпретатора Python

Мы видим, что начале каждой строки интерпретатор выводит подсказку >>> . Когда мы вводим команду for , состоящую из двух строк, подсказка меняется на троеточие . .

Выполняя команду print(sum) , интерпретатор печатает результат — число 5050. Если мы допустим ошибку, интерпретатор подскажет нам, где она находится.

Пример ошибки в программе

В примере выше мы забыли поставить двоеточие после инструкции for , о чем интерпретатор и сообщает.

Немедленный отклик интерпретатора очень важен при изучении языка. Новички, видя сообщениях об ошибках и пробуя разные варианты, быстро осваивают незнакомый синтаксис. Именно поэтому Python и JavaScript часто используют для обучения.

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

Кроме того, интерпретируемые языки часто используют для разработки прототипов больших программ. В интерактивном режиме он постоянно выполняет одни и те же действия: читает команду программиста, выполняет ее и печатает результат. Такой режим называют Циклом Чтения-Выполнения-Печати, или, по-английски Read-Evaluate-Print Loop. Обычно это название сокращают до аббревиатуры REPL.

Цикл Чтения-Выполнения-Печати

Пример интерпретатора JavaScript

Интерпретатор JavaScript встроен прямо в браузер. Посмотрим, как он работает, на примере браузера Chrome.

В правом верхнем углу есть три вертикальные точки, которые вызывают меню браузера. Нажмите и выберите пункт меню Дополнительные инструменты, а затем Инструменты разработчика.

Инструменты разработчика Chrome

Вы увидите новое окно, заполненное вкладками. Все эти инструменты полезны и их стоит освоить. Но сейчас нам нужна одна вкладка — Console. В консоли мы можем набирать команды языка JavaScript и сразу видеть отклик интерпретатора.

a = 1; // => 1 b = 2; // => 2 3 * (a + b ); // => 9 

Интерпретатор сохранит переменные a и b со значениями 1 и 2, затем вычислит значение 3 * (a + b) и напечатает результат 9.

Консоль Chrome

Выполнение программы

Цикл REPL помогает разрабатывать программу, но вводить каждую команду по отдельности не удобно: куда быстрее ввести их один раз, а затем запустить готовую программу. Для этого создадим текстовый файл sum . py и запишем там команды:

sum = 0 for i in range(1, 101): sum = sum + i print(sum) 

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

> python sum.py 5050 

Интерпретатор выполняет команды одну за одной и в конце завершает свою работу. Такой режим работы интерпретатора называют пакетным.

Таким образом, интерпретатор может работать в двух режимах. Интерактивный режим (REPL) помогает нам проверять идеи и придумывать решение задач. Пакетный режим выполняет готовую программу.

Устройство интерпретатора

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

В программе на Python, которую мы обсуждали выше есть операторы присваивания, цикл for и вызов функции print . Все это — команды, которые понимает интерпретатор Python. Для каждой команды в интерпретаторе есть блок кода, который умеет такую команду исполнять.

Вторая важная составляющая интерпретатора — анализатор текста. Когда программист вводит текст, анализатор разбирает его на составные части и понимает, о какой команде идет речь. После этого он передает управление блоку, отвечающему за выполнение этой команды.

Так — в цикле — интерпретатор и работает. Анализирует введенную команду, затем выполняет, снова анализирует и снова выполняет. Анализ текста это, конечно, не тривиальная задача, но и не слишком трудная, так что интерпретаторы на самом деле не такие сложные программы.

Как работает интерпретатор

Достоинства и недостатки

  • Простота изучения. REPL помогает проверять, как работают незнакомые конструкции и быстро осваивать синтаксис языка.
  • Простота программирования. Как и компилятор, интерпретатор избавляет от необходимости писать программы в машинных кодах.
  • Кроссплатформенность. Интерпретаторы разработаны для разных платформ — Mac, Windows, Linux, поэтому написанная нами программа будет работать на всех платформах.
  • Улучшение программы за счет интерпретатора. Скорость программ зависит не только от качества кода, но и от того, насколько быстро работает интерпретатор. Например, программисты Google постоянно улучшают интерпретатор JavaScript, который работает в браузере Chrome. Если мы написали программу на JavaScript, с каждой новой версией Chrome она работает быстрее, даже если мы ничего в ней не меняем.
  • Низкая скорость. Интерпретируемые программы работают медленнее, чем программы в машинных кодах. Это происходит потому, что интерпретатор должен сначала проанализировать текст команды, и лишь потом выполнить ее. Программа в машинных кодах сразу понятна компьютеру.
  • Зависимость от интерпретатора. Интерпретируемой программе нужен интерпретатор. В Windows программы в машинных кодах имеют расширение .exe. Такую программу, скажем, архиватор 7-zip можно просто запустить. А для того, чтобы выполнить программу на языке Python, нужен интерпретатор python.
  • Доступность исходного кода. Исходный код на интерпретируемом языке доступен пользователю программы. Пользователь может подсмотреть в программе то, что ее автор хотел бы скрыть, например, способ шифрования пароля или уникальный алгоритм.
  • Позднее обнаружение ошибок. Интерпретаторы выполняют программы по одной команде. Если в синтаксисе команды допущена ошибка, интерпретатор не сможет об этом узнать, пока не приступит к ее анализу. В больших программах есть куски, которые выполняются реже других и, возможно, там есть ошибки, про которые программист не знает. Чтобы избежать ошибок, которые увидит пользователь программы, приходится тестировать её гораздо тщательней.

Выводы и рекомендации

Интерпретатор языка программирования — это программа, выполняющая команды, написанные на этом языке. Мы, например, говорим интерпретатор Python или интерпретатор JavaScript.

Интерактивный режим (REPL) помогает программистам изучать синтаксис языка и проверять свои идеи.

Интерпретатор состоит из анализатора текста и исполнителей отдельных команд языка, таких как цикл for , проверка if , вызов функции print , и других.

К достоинствам интерпретируемых языков относят простоту изучения. Именно поэтому программирование начинают изучать с таких языков, как Python и JavaScript.

Как работает Python?

Всем еще раз привет, сейчас расскажу о том, как работает Python, что такое интерпретатор, как работает компилятор и что такое байт-код, далее расскажу о виртуальной машине (PVM) и о производительности Python. Также о альтернативных реализациях интерпретатора.

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

Интерпретатор

Интерпретатор — это такая программа, которая выполняет другие программы. Когда вы пишете программу на языке Python, интерпретатор читает вашу программу и выполняет содержащиеся в ней инструкции. В действительности, интерпретатор — это слой программной логики между вашим программным кодом и аппаратурой вашего компьютера.

В зависимости от используемой версии Python сам интерпретатор может быть реализован как программа на языке C, как набор классов Java и в каком-либо другом виде, но об этом позже.

Запуск сценария в консоли

Давайте запустите в консоле интерпретатор:

# python 

Теперь он ожидает ввода комманд, введите туда следующую инструкцию:

print 'hello world!' 

ура, наша первая программа! 😀

Запуск сценария из файла

Создайте файл "test.py", с содержимым:

# вывести "hello world" print "hello world" # вывести 2 в 10 степени print 2 ** 10 

и выполните этот файл:

# python /path/to/test.py 

Вы увидите в консоли результат, поехали дальше!

Динамическая компиляция и байт-код

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

В следующий раз, когда вы запустите свою программу интерпретатор минует этап компиляции и отдаст на выполнение откомпилированный файл с расширением ".pyc". Однако, если вы изменили исходные тексты вашей программы, то снова произойдет этап компиляции в байт-код, так как Python автоматически следит за датой изменения файла с исходным кодом.

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

Виртуальная машина Python (PVM)

После того как пройдет процесс компиляции, байт-код передается механизму под названием виртуальная машина, которая и выполнит инструкции из байт-кода. Виртуальная машина - это механизм времени выполнения, она всегда присутствует в составе системы Python и это крайняя составляющая системы под названием "Интерпретатор Python".

python

Для закрепления пройденного еще раз проясним ситуацию, компиляция в байт-код производится автоматически, а PVM - это всего лишь часть системы Python, которую вы установили вместе с интерпретатором и компилятором. Все происходит прозрачно для программиста, и вам не надо выполнять эти операции вручную.

Производительность

Программисты имеющие опыт работы с такими языками как C и C++, могут заметить некоторые отличия в модели выполнения Python. Первое - это отсутствие этапа сборки или вызова утилиты "make", программы на Python могут быть сразу же запущены после написания исходного кода. Второе отличие - байт-код не является двоичным машинным кодом (например инструкции для микропроцессора Intel), он является внутренним представлением программы на языке Python.

По этим причинам программы на Python не могут выполняться также быстро как на C/C++. Обход инструкций выполняет виртуальная система, а не микропроцессор, и чтобы выполнить байт-код, необходима дополнительная интерпретация, инструкции которой требуют большего времени, чем машинные инструкции микропроцессора.

Однако, с другой стороны, в отличии от традиционных интерпретаторов, например как в PHP, здесь присутствует дополнительный этап компиляции - интерпретатору не требуется каждый раз анализировать исходный текст программы.

В итоге, Python по производительности находится между традиционными компилирующими и традиционными интерпретирующими языками программирования.

Альтернативные реализации Python

То что было сказано выше о компиляторе и виртуальной машине, характерно для стандартной реализации Python, так называемой CPython (реализации на ANSI C). Однако также существует альтернативные реализации, такие как Jython и IronPython, о которых пойдет сейчас речь.

CPython

Это стандартная и оригинальная реализация Python, названа так, потому что написана на ANSI C. Именно ее мы установили, когда выбрали пакет ActivePython или установили из FreeBSD портов. Поскольку это эталонная реализация, она как правило работает быстрее, устойчивее и лучше, чем альтернативные реализации.

Jython

Первоначальное название JPython, основная цель - тесная интеграция с языком программирования Java. Реализация Jython состоит из Java-классов, которые выполняют компиляцию программного кода на языке Python в байт-код Java и затем передают полученный байт-код виртуальной машине Java (JVM).

Цель Jython состоит в том, чтобы позволить программам на языке Python управлять Java-приложениями, точно также как CPython может управлять компонентами на языках C/C++. Эта реализация имеет беcшовную интеграцию с Java. Поскольку программный код на Python транслируется в байт-код Java, во время выполнения он ведет себя точно также, как настоящая программа на языке Java. Программы на Jython могут выступать в качестве апплетов и сервлетов, создавать графический интерфейс с использованием механизмов Java и т.д. Более того, Jython обеспечивает поддержку возможности импортировать и использовать Java-классы в программном коде Python.

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

IronPython

Реализация предназначена для обеспечения интеграции программ Python с приложениями, созданными для работы в среде Microsoft .NET Framework операционной системы Windows, а также в Mono - открытом эквиваленте для Linux. Платформа .NET и среда выполнения языка C# предназначены для обеспечения взаимодействия между программными объектами - независимо от используемого языка программирования, в духе более ранней модели COM компании Microsoft.

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

Средства оптимизации скорости выполнения

Существуют и другие реализации, включая динамический компилятор Psyco и транслятор Shedskin C++, которые пытаются оптимизировать основную модель выполнения.

Динамический компилятор Psyco

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

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

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

Psyco обеспечивает увеличение скорости от 2 до 100 раз, но обычно в 4 раза, при использовании немодифицированного интерпретатора Python. Единственный минус у Psyco, это то обстоятельство, что в настоящее время он способен генерировать машинный код только для архитектуры Intel x86.

Psyco не идет в стандартной поставке, его надо скачать и установить отдельно. Еще есть проект PyPy, который представляет собой попытку переписать PVM с целью оптимизации кода как в Psyco, проект PyPy собирается поглотить в большей мере проект Psyco.

Транслятор Shedskin C++

Shedskin - это система, которая преобразует исходный код на языке Python в исходный код на языке C++, который затем может быть скомпилирован в машинный код. Кроме того, система реализует платформонезависемый подход к выполнению программного кода Python.

Фиксированные двоичные файлы (frozen binaries)

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

Фиксированные двоичные файлы объединяют в единый файл пакета байт-код программ, PVM и файлы поддержки, необходимые программам. В результате получается единственный исполняемый файл, например файл с расширение ".exe" для Windows.

На сегодняшний день существует три основных инструмента создания "frozen binaries":

  • py2exe - он может создавать автономные программы для Windows, использующие библиотеки Tkinter, PMW, wxPython и PyGTK для создания графического интерфейса, программы использующие программные средства создания игр PyGame, клиентские программы win32com и многие другие;
  • PyInstaller - напоминает py2exe, но также работает в Linux и UNIX и способен производить самоустанавливающиеся исполняемые файлы;
  • freeze - оригинальная версия.

Вам надо загружать эти инструменты отдельно от Python, они распространяются бесплатно.

Фиксированные двоичные файлы имеют немалый размер, ибо они содержат в себе PVM, но по современным меркам из все же нельзя назвать необычно большими. Так как интерпретатор Python встроен непосредственно в фиксированные двоичные файлы, его установка не является обязательным требованием для запуска программ на принимающей стороне.

Резюме

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

Комментарии

создал файл, запустил его через пайтон, но пишет, что ошибка кодировки (файл сохранен в UTF-8) 🙁
SyntaxError: Non-ASCII character '\xd0'

решение - указать в самом начале файла

# -*- coding: utf-8 -*- 

Особенности интерпретатора Python

Особенности интерпретатора Python

У Python есть одна интересная особенность, которая его выделяет среди других языков программирования. Мы знаем, что Python — интерпретируемый язык, но его способ интерпретации несколько отличается от других похожих. В свою очередь это порождает достаточно неочевидные вещи в поведении самого Питона. Знание таких особенностей, позволяет лучше понять поведение Python.

Компилятор и интерпретатор

Для начала рассмотрим отличие компилятора от интерпретатора. Ключевое различие в том, что компилятор на выходе даёт исполняемый код. То есть исходный код программы используется для генерации другого кода — исполняемого. Именно исполняемый файл и работает. Если мы изменим исходный код, то потребуется новая компиляция, чтобы получить рабочую программу.

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

Анализ исходного кода

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

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

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

Интерпретация целого файла

Для примера рассмотрим PHP, поскольку именно в нём реализован подобный подход. Интерпретатор PHP анализирует файл целиком. Если в любой строчке файла есть ошибки, то PHP не позволит запустить данный файл. Например, такой простой файл, где мы специально допустим ошибку:

Из за «blabla» PHP вывалится с ошибкой «PHP Fatal error: Uncaught Error: Undefined constant "blabla"». При этом первая строчка с «hello» не будет выполнена.

Теперь рассмотрим другой код:

Он выполняется как положено, но обратите внимание, что функцию мы объявили уже после того, как её использовали. То есть интерпретатор загрузил весь файл, построил по нему карту функций и сделал их доступными как минимум в пределах данного файла.

Теперь для исследования давайте создадим ещё одну функцию с тем же именем и попробуем выполнить файл. PHP вываливается с ошибкой «PHP Fatal error: Cannot redeclare a()». То есть мы не можем создать две функции с одинаковым именем.

Запомним эти особенности и теперь посмотрим как ведёт себя Python

Построчная интерпретация

Выполним тот же код, чтобы понять отличия:

print('hello') blabla

Python вываливается с ошибкой «NameError: name 'blabla' is not defined». Но при этом первая строчка с «hello» была выполнена. То есть Python выполняет код построчно.

Теперь второй пример:

print('hello') a(10) def a(x): print(x)

Опять ошибка: «NameError: name 'a' is not defined». То есть Python ничего не знает о том, что функция объявлена ниже.

Попробуем объявить две одноимённые функции:

print('hello') def a(x): print(x) def a(x): print(x*2) a(10) # 20

Когда дело дойдёт до выполнения функции, то Python использовал последнюю объявленную.

Из этого можно сделать важный вывод: Python построчный интерпретатор, где команды выполняются сверху вниз, и это отличает его от других интерпретаторов. Наиболее близким по поведению к Python можно назвать Basic, который когда-то был крайне популярным.

Байт-код

Байт-код — это специальный файл, который является промежуточным перед непосредственным исполнением файла. Например в Java компилятор отдаёт не исполняемый файл, а байт-файл, который в свою очередь выполняется виртуально машиной (она под конкретную систему). В Python что-то подобное — исходный код трансформируется в байт-код, только в памяти и потом интерпретируется виртуальной машиной.

Но есть одна особенность — если в других языках, байт-код формируется уже после проверки на ошибки, то в Python — он формируется безусловно как есть. Для примера можно любой пример с ошибками скомпилировать в pyc-файл (это и есть байт-код) с помощью python -m compileall . и убедиться, что файлы создаются без каких-либо проблем.

Таким образом байт-код в Python — это просто бинарная форма исходного кода без особых проверок.

Особенности Python

Они проистекают именно из-за этой технической особенности интерпретатора.

Мы можем выполнять код до строки с ошибкой

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

Можно затереть любые другие функции

На Python можно спокойно переписать любые, даже стандартные функции. Например такой вот «дикий» код:

print1 = print def print(x): print1('hello') print(10) # hello print(20) # hello print(30) # hello

Теперь на любой print() будет выводиться «hello».

Другой пример: можно «убить» любую функцию:

print = 10 list = 20 str = 30 dict = 40 range = 50

Вспомните как часто для имени строки используется «str»? А в Python это стандартная функция. Можно случайно затереть любую функцию и Python даже не выдаст предупреждения.

При программировании на Python нужно как-то следить за именованием функций и переменных. Можно случайно использовать одно имя для функции и переменной, а потом не понимать почему код работает неверно. Проблему можно было бы решить, если в Python можно было бы использовать какой-то символ для обозначения переменных: как в PHP символ «$». Но в Python доступны только цифры, буквы и символ подчеркивания.

Стоит ли удивляться обилию идентификаторов с подчеркиванием в Python-программах? Просто ничего другого нет.

Я бы посоветовал для переменных использовать верблюжью нотацию Pascal (т.н. CamelCase), где первый символ указывается с большой буквы:

My = 'google' MyName = 'Маша' MyAge = 26

Она наиболее близка к общепринятой (mixedCase) и избавит от использования символа подчеркивания.

Неожиданное выполнение кода

Построчное выполнение кода в Python возможно в достаточно неожиданных местах, например при описании класса:

class MyClass: print('Як справи?') k = 42 def out(self): print(10) print('Hello!') print(k)

Простой запуск кода, выведет «Як справи?», «Hello!» и переменную k , хотя мы даже не объявляли создание объекта.

Кстати этот пример показывает особенности ООП в Python. Если в других языках инструкция class это начало шаблона типа данных, единый блок, который не должен выполняться вне объекта, то Python всё это воспринимает «в лоб» — для него class — максимум отдельная область видимости (scope) для методов и полей, а всё что внутри выполняется как обычный код.

Это как раз «чудеса» работы интерпретатора, а не какая-то «особенная объектная модель» Python.

Язык программирования Python. Часть 2. Компиляторы и Интерпретаторы

При взаимодействии человека и компьютера мостиком выступает высокоуровневый язык программирования. Высокоуровневые языки программирования создаются такими, чтобы писать на их было удобно человеку, компьютер такие языки не понимает. Компьютер — вычислительная машина, для которой понятны только наборы из нулей и единиц.

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

Компилятором называется транслятор, который получает файл с кодом, расшифровывает его и переводит в машинные коды целиком. Получается исполняемый файл, который можно запустить внутри той или иной операционной системы (например, исполняемый файл .exe для запуска в MS Windows). В результате работы компилятора пользователь может пользоваться программой, но не может прочитать ее исходный код.

Первый готовый к работе Компилятор был представлен в 1952 году Грейс Хоппер — американским учёным и коммодором флота США.

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

Интерактивный режим еще называют циклом «чтения – исполнения – печати» (Read-eval-print loop или REPL). Пользователь пишет в консоли какую-то команду и как только нажимает клавишу Enter, команда выполняется. Такой режим используют для быстрых подсчетов, отправки запросов и других действий, которым достаточно одной команды.
Пакетный режим используется для более крупных задач, которые неудобно писать построчно и выполнять сразу же. Пользователь пишет код в файле и сохраняет его с нужным расширением. Интерпретатор получает файл, построчно считывает написанный там код и выполняет его.

Первый Интерпретатор был создан в 1958 году Стивом Расселом - американским ученым-программистом, наиболее известным благодаря созданию «Spacewar!», одной из самых ранних видеоигр.

Интерпретатор можно сравнить с синхронным переводчиком, который сразу же озвучивает перевод. А компилятор — с литературным переводчиком, который переводит тексты, а потом отправляет перевод тем, кто будет с ним работать.

Компилятор и интерпретатор делают одну и ту же работу и у вас может возникнуть логичный вопрос — а что же лучше? Процесс компиляции или интерпретации? Тут нет очевидного ответа, ведь если бы он был, то один из этих трансляторов давно бы перестал существовать. У каждого из них есть свои преимущества и недостатки.

python

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

компилятор

Для крупных проектов выбирают компиляцию: она быстрее и безопаснее. Однако в этом случае придется позаботиться о совместимости, хотя мы уже привыкли устанавливать только подходящий нашему «железу» софт.

интерпретатор

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

программирование

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

разработка

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

Что все это значит для языка программирования Python?

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

А о том, каков именно язык программирования Python, мы расскажем в следующей статье!

Следите за продолжением…

могилев

Наш адрес: г. Могилев, ул. Чайковского, дом 11 (БЦ "БРИКС"), офис 214

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *