Python против Cpython

Что все эти проблемы с Python и CPython (Jython, IronPython), я не понимаю:

python.org упоминает, что CPython:

"Традиционная" реализация Python (по кличке CPython)

еще один вопрос о переполнении стека указывает, что:

CPython - это интерпретатор байт-кода по умолчанию для Python, который написан на C.

Честно говоря, я не понимаю, что обе эти объяснения практически означают, но я думал, что, если я использую CPython, это означает, что когда я запускаю образец кода python, он компилирует его на язык C, а затем выполняет его, как если бы это был код C

Итак, что же такое CPython и как он отличается по сравнению с python, и должен ли я, вероятно, использовать CPython над Python и если да, то каковы его преимущества?

Ответ 1

Итак, что такое CPython

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

Последняя часть - это ваше замешательство; вам нужно держать Python-язык отдельно от того, что запускает код Python.

CPython реализуется в C. Это просто деталь реализации. CPython компилирует ваш код python в байт-код (прозрачно) и интерпретирует этот байт-код в цикле оценки.

CPython также первым внедряет новые функции; Разработка Python-language использует CPython в качестве базы, другие реализации следуют.

Как насчет Jython и т.д.

Jython, IronPython и PyPy являются текущими "другими" реализациями языка программирования Python; они реализованы в Java, С# и RPython (подмножество Python), соответственно. Jython компилирует ваш код Python в байт-код Java, поэтому ваш код Python может работать на JVM. IronPython позволяет запускать Python в Microsoft CLR. И PyPy, реализованный в (подмножестве) Python, позволяет вам запускать код Python быстрее, чем CPython, который по праву должен взорвать ваш разум.: -)

Собственно компиляция в C

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

Ответ 2

Вам нужно различать язык и реализацию. Python - это язык,

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

Python - это язык. CPython - это реализация Python в C. Jython - это реализация на Java и т.д.

Подводя итог: вы уже используете CPython (если вы скачали из здесь).

Ответ 3

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

Первое, что нужно понять, это то, что "Python - это интерфейс. Есть спецификации того, что должен делать Python и как он должен себя вести (как с любым интерфейсом). И существует множество реализаций (как и при любой интерфейс).

Второе, что нужно понять, это то, что" интерпретируется и компилируется" свойства реализации, а не интерфейс.

Ответ 4

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

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

CPython - это оригинальная реализация, написанная на C. (Часть "C" в "CPython" относится к языку, который использовался для написания самого интерпретатора Python.)

Jython - это один и тот же язык (Python), но реализованный с использованием Java.

Интерпретатор IronPython был написан на С#.

Там также PyPy - интерпретатор Python, написанный на Python. Сделайте свой выбор:)

Ответ 5

Даже у меня была та же проблема, что и CPython, JPython, IronPython, PyPy отличаются друг от друга.

Итак, я готов прояснить три вещи, прежде чем я начну объяснять:

  • Python. Это язык, он только указывает/описывает, как передать/выразить себя интерпретатору (программа, которая принимает ваш код на Python).
  • Реализация. Это все о том, как был написан интерпретатор, в частности, на каком языке и что он делает... li >
  • Bytecode. Это код, который обрабатывается программой, обычно называемой виртуальной машиной, а не "реальной" машиной, аппаратным процессором.

CPython - это реализация, которая была написанный на языке С. Он заканчивает выпуск байт-кода (стековый станок основанный на инструкциях), который является специфичным для Python, а затем выполняет его. Причиной конвертировать код Python в байт-код является то, что реализовать интерпретатор, если он похож на машинные инструкции. Но, нет необходимости создавать какой-либо байт-код перед выполнением Код Python (но CPython действительно создает).

Если вы хотите посмотреть байт-код CPython, то вы можете. Вот как вы можете:

>>> def f(x, y):                # line 1
...    print("Hello")           # line 2
...    if x:                    # line 3
...       y += x                # line 4
...    print(x, y)              # line 5
...    return x+y               # line 6
...                             # line 7
>>> import dis                  # line 8
>>> dis.dis(f)                  # line 9
  2           0 LOAD_GLOBAL              0 (print)
              2 LOAD_CONST               1 ('Hello')
              4 CALL_FUNCTION            1
              6 POP_TOP

  3           8 LOAD_FAST                0 (x)
             10 POP_JUMP_IF_FALSE       20

  4          12 LOAD_FAST                1 (y)
             14 LOAD_FAST                0 (x)
             16 INPLACE_ADD
             18 STORE_FAST               1 (y)

  5     >>   20 LOAD_GLOBAL              0 (print)
             22 LOAD_FAST                0 (x)
             24 LOAD_FAST                1 (y)
             26 CALL_FUNCTION            2
             28 POP_TOP

  6          30 LOAD_FAST                0 (x)
             32 LOAD_FAST                1 (y)
             34 BINARY_ADD
36 RETURN_VALUE

Теперь давайте посмотрим на приведенный выше код. Строки с 1 по 6 - это определение функции. В строке 8 мы импортируем модуль 'dis', который можно использовать для просмотра промежуточного байт-кода Python (или вы можете сказать, дизассемблер для байт-кода Python), который генерируется CPython (интерпретатором).

ПРИМЕЧАНИЕ. Я получил ссылку на этот код С#python IRC-канала: https://gist.github.com/nedbat/e89fa710db0edfb9057dc8d18d979f9c

И тогда есть Jython, который написан на Java и заканчивает создание Java-байтового кода. Байт-код Java работает на Java Runtime Environment, которая представляет собой реализацию виртуальной машины Java (JVM). Если это сбивает с толку, я подозреваю, что вы не знаете, как работает Java. В непрофессиональных терминах Java-код (язык, а не компилятор) берется компилятором Java и выводит файл (который является байтовым кодом Java), который может запускаться только с использованием JRE. Это делается так, что после компиляции кода Java его можно портировать на другие машины в формате байтового кода Java, который может выполняться только JRE. Если это все еще запутывает, вы можете захотеть взглянуть на эту веб-страницу.

Здесь вы можете спросить, является ли байт-код CPython переносимым, как Jython, я подозреваю, что нет. Байт-код , созданный в реализации CPython, был специфичен для этого интерпретатора для упрощения дальнейшего выполнения кода (я также подозреваю, что такое промежуточное производство байт-кода просто для удобства обработки выполняется во многих других переводчики).

Итак, в Jython, когда вы компилируете свой код на Python, вы получаете байт Java-кода, который может быть запущен на JVM.

Аналогично, IronPython (написанный на языке С#) компилирует ваш код Python в Common Language Runtime (CLR), что является аналогичной технологией по сравнению с JVM, разработанной Microsoft.

Ответ 6

implementation означает, какой язык использовался для реализации Python, а не как реализовать код python. Преимущество использования CPython - наличие C Run-time, а также простая интеграция с C/С++.

Итак, CPython изначально был реализован с использованием C. В исходной реализации были другие вилки, которые позволили Python использовать передовые Java (JYthon) или .NET Runtime (IronPython).

В зависимости от того, какую реализацию вы используете, доступность библиотеки может отличаться, например Ctypes недоступен в Jython, поэтому любая библиотека, которая использует ctypes, не работает в Jython. Аналогичным образом, если вы хотите использовать Java-класс, вы не можете напрямую делать это из CPython. Вам либо нужен клей (JEPP), либо нужно использовать Jython (реализация Java Python)

Ответ 7

Итак, что такое CPython

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

CPython реализуется в C. Это просто деталь реализации. CPython компилирует ваш код python в байт-код (прозрачно) и интерпретирует этот байт-код в цикле оценки.

CPython также первым внедряет новые функции; Разработка Python-language использует CPython в качестве базы, другие реализации следуют.

Ответ 8

Вы должны знать, что CPython не поддерживает многопоточность из-за Global Interpreter Lock. Он также не имеет механизмов оптимизации для рекурсии и имеет множество других ограничений, которые пытаются выполнить другие реализации и библиотеки.

Вы должны взглянуть на эту страницу на вики python.

Посмотрите на фрагменты кода на странице this, это даст вам представление о том, что такое интерпретатор.