【问题标题】:Implementation of string functions in Python? [closed]Python中字符串函数的实现? [关闭]
【发布时间】:2011-11-27 14:37:27
【问题描述】:

有没有关于 Python 的字符串函数是如何在 Python 中实现的文档?

我知道 str 是一个内置模块,所以它的功能是用 C 实现的。 但是无论如何都没有代码吗?在 Pypy 中怎么样?从我目前阅读的内容来看,他们已经在 Python 本身中重新实现了许多内置模块。

例题:字符串的split方法是如何实现的? (没有写我自己的实现)

编辑:我不是在寻找用 C 编写的实现(这是 Python/CPython 源代码中的默认实现)。

【问题讨论】:

  • Python(包括PyPy)是开源的:要了解实现,就看实现。
  • PyPy 在 Python 中实现了一些内置函数。但大多数都是用 RPython 编写的,它可能比 Python 实现更底层,也可能不会。
  • Python (CPython) 的默认实现使用 C 函数作为字符串函数,正如我在原始帖子中提到的那样。我正在寻找的是这些函数的 Python 实现。
  • @delnan RPython 与 Python 代码的兼容性如何。我读过它是一个子集——这是否意味着 Python 会完全理解它?例如,我可以解析 RPython 代码的 AST 吗?
  • 是的,所有的 RPython 程序都是有效的 Python 程序(这对测试有很大的影响)。我的观点是,由于限制,它们不一定是惯用的或可以理解的。但仔细想想,RPython 字符串至少有一些内置方法(即 RPython 程序不需要定义它们,它们是内置在 RPython 中的),所以也许 PyPy 的 Python 字符串实现主要调用这些方法。

标签: python string implementation pypy


【解决方案1】:

这并不能真正回答所提出的问题,只是有点太长了,无法发表评论。

对源代码的一些快速挖掘表明,PyPy 有split()this high-level, readable versionthis lower-level version 的两个实现,这似乎是 rpython 本身中split() 的实现。

这些实现都不等同于 CPython 的 split() 方法(最明显的是,它们不处理未提供 sep 的特殊情况 CPython does)。但是,如果您只对使用的基本算法而不是细节感兴趣,PyPy 的实现可能是一个指南(快速浏览,它看起来与 CPython 和Jython 做的事情基本相同)。

不过,作为一般资源,没有理由认为 PyPy 对所有字符串函数的实现会反映 CPython 中使用的算法——毕竟,PyPy 旨在作为在 JIT 中运行的 Python 的优化版本,并且这可能会对最合理的方法实现方式产生重大影响(尤其是字符串函数,它经常会成为性能瓶颈,因此“优化”运行时的实现者有优化的动机)。

考虑一个更普遍的问题,CPython 开发人员几乎没有动力去维护已经用 C 维护的低级库的一组单独的纯 Python 实现。镜像实现似乎存在很大风险会变得陈旧或与实际所做的事情不准确,这最终可能对那些试图在不阅读 C 代码的情况下理解 Python 内部工作原理的人有害。

【讨论】:

  • 如果 PyPy 的实现不能处理sep 参数被省略或None 的情况,那么它几乎不是我所说的“合规实现”。如果算法不同,我不会感到惊讶,但这种不同的功能会(确实)。
  • @martineau:诚然,如果我没有错过 PyPy 如何调用 split() 的一些内容,我会感到惊讶,因为不同的功能会非常出乎意料。这正是我快速浏览后发现的。
  • 使用的实现在objspace/std/stringobject.py
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-03-03
  • 2020-12-22
  • 2014-07-10
  • 1970-01-01
  • 2022-09-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多