Skip to content

Интерпретатор языка Python

Язык Python относится к интерпретирууемым языками программирования. По всеобщему заблуждению считается, что в таком случае программа-интерпретатор, получая команду на исполнение файла, читает каждую строку и тут же выполняет её. Как мы узнали отсюда это не так. Сейчас мы посмотрим применительно к Python что из себя представляет его интерпретатор.

Самым правильным интерпретатором считается CPython. Однако нужно понять, что такое "правильно" в нашем случае.

Стандарт Python

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

Это всё закреплено определёнными стандартами, которые основаны на философии языка "The Zen of Python". Текст этого документа можно посмотреть, введя команду import this

import this
# /usr/lib/python3.10/__pycache__/this.cpython-310.pyc matches /usr/lib/python3.10/this.py
# code object from '/usr/lib/python3.10/__pycache__/this.cpython-310.pyc'
The Zen of Python, by Tim Peters

Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those!
import 'this' # <_frozen_importlib_external.SourceFileLoader object at 0x7f178f3a0670>

Срабатывает эта команда один раз за сессию, а перевод такой:

  • Красивое лучше, чем уродливое.
  • Явное лучше, чем неявное.
  • Простое лучше, чем сложное.
  • Сложное лучше, чем запутанное.
  • Плоское лучше, чем вложенное.
  • Разреженное лучше, чем плотное.
  • Читаемость имеет значение.
  • Особые случаи не настолько особые, чтобы нарушать правила. конечно, этот PEP может быть неполным (фактически, он, наверное, никогда не будет законч
  • При этом практичность важнее безупречности.
  • Ошибки никогда не должны замалчиваться.
  • Если они не замалчиваются явно.
  • Встретив двусмысленность, отбрось искушение угадать.
  • Должен существовать один и, желательно, только один очевидный способ сделать это.
  • Хотя он поначалу может быть и не очевиден, если вы не голландец [^1].
  • Сейчас лучше, чем никогда.Хотя никогда зачастую лучше, чем прямо сейчас.
  • Если реализацию сложно объяснить — идея плоха.
  • Если реализацию легко объяснить — идея, возможно, хороша.
  • Пространства имён — отличная штука! Будем делать их больше!

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

Понятно, что язык, которым пользуются людей больше чем его создатель, будет нуждаться в развитии на основании коллегиальных обсуждений. И ясно, что только обсуждать бессмысленно - нужна резолюция. И такая есть в языке Python, а точнее их настолько много и они рассматривают настолько различные стороны жизни данного языка, что все их помнить ни к чему, да и прочитать все явно не получится (их под 700 штук!!!) А называются они PEP – Python Enhancement Proposal, предложения по развитию Python. Эти стандарты позволяют создавать унифицированную проектную документацию для новых утвержденных возможностей языка Python. Которые потом реализуются в конкретные программы-интерпретаторы...

...А их, оказывается, много!

И вот в этой связи имеет место утверждение, что самым правильным интерпретатором считается CPython. Он наиболее универсален и написан на родном C. Хотя существуют реализации написанные на Java, созданные специально под .NET от Microsoft, а значит, написан на C# и так далее - при необходимости можно эту информацию очень легко найти.