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, это даст вам представление о том, что такое интерпретатор.