【问题标题】:How are super, pass, yield and other keywords are implemented in Python? [closed]Python中的super、pass、yield等关键字是如何实现的? [关闭]
【发布时间】:2015-05-25 09:14:20
【问题描述】:

我在最近的一次采访中被问到这个问题。而且我知道 super 是获取超类的方法, pass 没有任何作用,而是关闭函数或类声明,yield 在生成器中使用。但我不知道它们是如何在 Python 中实现的。

我搜索了,只得到了super:How is super() in Python 3 implemented?的答案,有人可以替别人回答吗?

【问题讨论】:

  • 你知道编译器是如何工作的吗? “词法分析器”和“解析器”做什么? passyield 在那里实现。
  • 他们只是编译(或者在 pass 的情况下不编译)成特定的 PVM 指令(在 CPython 中)。你提到的那个答案也是 CPython 代码。
  • @FerdinandBeyer 不,我不知道。 :(你能解释得更详细吗?
  • 如何实现这些将取决于嗯,实现。因此,您需要查看源代码,它可能会在任何版本中更改。除非您正在编写自己的 Python 实现,否则这听起来像是一个愚蠢的问题。如何使用它们是一个不同的问题。
  • @kxxoling 在 CPython 中,解释器读取您的 .py 文件并将代码编译成它自己的“字节码”表示,然后可执行。 “词法分析器”是第一个组件,它将读取 Python 代码并生成“令牌”流。如果它读取“通过”,它将报告类似“TK_PASS”的内容。然后这些标记被“解析器”使用,它不再关心关键字的拼写方式,但知道它们被允许出现在哪里(例如,def return yield 是无效的语法)。阅读有关“词法分析”和“解析”的 Wikipedia 文章以了解更多信息。

标签: python yield


【解决方案1】:

super 不是 python 中的关键字,它是像 intrange 这样的变量。 解析器使用 passyielddefif 等关键字来构建 AST(抽象语法树)。您可以使用 python 的ast-module 自己玩 AST。 然后代码生成器将 AST 转入一些较低级别的机器或虚拟机代码,准备执行。

【讨论】:

    猜你喜欢
    • 2015-06-07
    • 2023-03-12
    • 2017-10-14
    • 2010-11-14
    • 1970-01-01
    • 2010-12-31
    • 2014-04-20
    相关资源
    最近更新 更多