【问题标题】:Some basic clarifications about Python?关于 Python 的一些基本说明?
【发布时间】:2011-06-17 18:10:20
【问题描述】:

昨晚我遇到了一个叫做 Jython 的术语,这对我来说有点新鲜,所以我开始阅读它只是为了增加我对 Python 的总体困惑。我也从未真正使用过 Python。所以这就是我感到困惑的地方。

  1. Python is implemented in C - 这是否意味着解释器是用 C 编写的,或者解释器是否将 Python 源代码转换为 C?

  2. CPython 只不过是最初的 Python,而这个术语后来只是为了将其与 Jython 区分开来——是真是假?

  3. 既然 Python 是用 C 实现的(不太确定这意味着什么),但这是否意味着 Python 可以与任何 C 代码无缝集成。

  4. Jython 是一种新的编程语言,还是它的语法和其他编程结构看起来与原始 python 完全相似?还是只是python可以与java代码集成?

  5. 如果我的上述问题都没有回答 Python 和 Jython 之间的区别,那是什么?

【问题讨论】:

  • 如果您查看 Python 语言的其他一些替代实现,可能会更容易理解 Jython 与 Python 和 CPython 的关系。大多数人谈论的另外两个是 IronPython(.NET 上的 Python)和 PyPy(Python 中的 Python……是的,这很奇怪)。

标签: python jython


【解决方案1】:

“Python”是语言本身的名称,而不是特定解释器实现的名称,就像“C”是编程语言的名称而不是特定编译器的名称一样。

“CPython”是用C编写的Python语言解释器的实现。它将Python源代码编译为字节码并解释字节码。它是 Python 语言最古老的参考实现。

“Jython”是 Python 语言的另一种实现。它将 Python 代码转换为 Java 字节码,可以在 Java 虚拟机上执行。

【讨论】:

    【解决方案2】:
    1. 前者。
    2. 我想是的。严格来说,“Python”仅指语言(无论实现如何)——但除非区别很重要(例如,在讨论实现细节时),它也可以指实现。 “CPython”是最古老、使用最广泛的实现的一个明确名称,它是事实上的标准。
    3. 嗯,不是很无缝。处理 Python 对象的 C 代码必须使用 PyObject * 并使用 CPython 提供的辅助函数来转换例如一个 Python 整数到一个 C int。同样,C 代码必须用函数包装并返回PyObject *,向解释器公开函数和元数据等。您也可以使用例如ctypes 用于调用本机代码(尽管它通常很痛苦)、SWIG 等以自动包装或Cython 以 Python-C 交叉语言编写 C 模块。
    4. 它是 Python 的另一种实现,即相同的语言。主要区别在于代码在 JVM 上运行,因此可以轻松与 Java(或 Scala 或 Closure 或任何其他 JVM 语言)集成。
    5. Python 是一种语言。 Jython 是该语言的实现。你问C和GCC的区别吗?

    【讨论】:

      【解决方案3】:

      a) 默认和最广泛使用的语言实现是用 c 编写的,也称为 CPython。例如,还有用 Python 实现的 Python - http://codespeak.net/pypy/dist/pypy/doc/

      b) CPython 是 C 中的默认 python 实现。Jython 是 Java 中的实现。

      c) 是的。

      d) Jython 是用 Java 编写的 Python 语言的实现。

      e) CPython 很容易与 C 集成,Jython 很容易与 Java 集成。

      【讨论】:

        【解决方案4】:

        a) Python 是一种编程语言。 Python 代码的解释器是使用 C 等其他编程语言实现的(我相信 PyPy 甚至使用 Python 本身来实现)。

        b) CPython,又名 Classic Python,是参考实现,用 C 语言编写。Jython 是用 Java 编写的 Python 解释器。

        c) 在 Python 中使用 C 库非常简单,例如使用 ctypes 模块。

        d) 见 b。

        e) 见 a 和 b。

        【讨论】:

          猜你喜欢
          • 2015-06-22
          • 2011-02-04
          • 1970-01-01
          • 2019-04-03
          • 2020-04-28
          • 2021-09-28
          • 2019-05-14
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多