我们的教授今天告诉我们可以建立一个迭代器
class IteratorExample:
def __init__(self, n):
pass
def __iter__(self):
return self
def __next__(self):
if cond:
pass
else:
raise StopIteration
当我们使用它时,比如在iteratorExample中的i中,解释器将调用iter(self)和next(self)方法。我的问题是:
您可以查看Python字节码反汇编,以了解
for
-loop是如何在Python中实现的:即使不看源代码,我们也可以猜测
__iter__
是由GET_ITER
操作码调用的,而__next__
是在FOR_ITER
中调用的。你知道吗事实上,CPython的Python/ceval.c证实了这一点,例如} ,它等价于
GET_ITER
调用^{iter(iterable)
可以调用iterable.__iter__()
方法。你知道吗这些函数也用C语言实现(在CPython中)。你可以在CPython source repository中看到它们。你知道吗
内置方法来自在Python/bltinmodule.c e.g., ^{} 调用^{} 中实现的
builtins
模块。你知道吗int
是Python中整数的类。它是在Objects/longobject.c(python3)中实现的。你知道吗否。Python安装文件夹不包含CPython的源代码。它可能包含标准库中的纯Python模块,例如Lib/fractions.py,除非它们是压缩的,或者只安装了
.pyc
、.pyo
文件等编译模块。你知道吗要获取完整的源代码,请运行:
其中
hg
是Mercurial executable。你知道吗作为练习,您可以找到其他Python implementations如Pypy、Jython定义
GET_ITER
、FOR_ITER
、len()
、int()
的位置。你知道吗你要求的是Python内置的行为。尤其是您使用的是用C编写的Python解释器,它通常被称为CPython。您可以找到CPython here的源代码,尽管要找到执行
len()
、int()
和迭代器协议的确切代码需要一些时间。你知道吗相关问题 更多 >
编程相关推荐