【发布时间】:2018-02-23 00:57:28
【问题描述】:
这是我针对这个问题的 Python 代码。
class iterator():
def __init__(self, data):
self.__data__ = data
self.__base__ = -1
self.__sentinel__ = len(data)
def __iter__(self):
return self
def __next__(self):
self.__base__ = self.__base__ + 1
if self.__base__ == self.__sentinel__:
raise StopIteration
else:
return self.__data__[self.__base__]
class iterable():
def __init__(self, data):
self.__iterator__ = iterator(data)
def __iter__(self):
return self.__iterator__
根据上面的定义,我写了下面的代码来理解迭代器绑定的概念
love = 'Welcome to my house!'
house = iterable(love)
ice = iter(house)
joy = iter(house)
if ice is joy:
print("ice and joy are the same iterators")
king = iter(love)
mouse = iter(love)
if king is not mouse:
print("king and mouse are not the same iterators")
当我运行上面的代码时,我会得到上面的消息,这表明从iter函数调用数据得到的迭代器不一样,但是从iter函数调用我的iterable得到的迭代器是一样的。谁能向我解释发生了什么事?我将不胜感激这方面的任何帮助。谢谢。
【问题讨论】:
-
只是一个风格提示:根据 PEP8,您应该使用“dunder”名称:“
__double_leading_and_trailing_underscore__:”位于用户控制的命名空间中的“魔术”对象或属性。例如__init__、@ 987654325@ 或__file__。永远不要发明这样的名字;只使用它们作为记录。” -
你不应该使用笨拙的名字,这是我的意思。