【发布时间】:2015-05-25 09:14:20
【问题描述】:
我在最近的一次采访中被问到这个问题。而且我知道 super 是获取超类的方法, pass 没有任何作用,而是关闭函数或类声明,yield 在生成器中使用。但我不知道它们是如何在 Python 中实现的。
我搜索了,只得到了super:How is super() in Python 3 implemented?的答案,有人可以替别人回答吗?
【问题讨论】:
-
你知道编译器是如何工作的吗? “词法分析器”和“解析器”做什么?
pass和yield在那里实现。 -
他们只是编译(或者在
pass的情况下不编译)成特定的 PVM 指令(在 CPython 中)。你提到的那个答案也是 CPython 代码。 -
@FerdinandBeyer 不,我不知道。 :(你能解释得更详细吗?
-
如何实现这些将取决于嗯,实现。因此,您需要查看源代码,它可能会在任何版本中更改。除非您正在编写自己的 Python 实现,否则这听起来像是一个愚蠢的问题。如何使用它们是一个不同的问题。
-
@kxxoling 在 CPython 中,解释器读取您的
.py文件并将代码编译成它自己的“字节码”表示,然后可执行。 “词法分析器”是第一个组件,它将读取 Python 代码并生成“令牌”流。如果它读取“通过”,它将报告类似“TK_PASS”的内容。然后这些标记被“解析器”使用,它不再关心关键字的拼写方式,但知道它们被允许出现在哪里(例如,def return yield是无效的语法)。阅读有关“词法分析”和“解析”的 Wikipedia 文章以了解更多信息。