我正在进入使用Python的5小时左右的经验,到目前为止,我对它的功能印象非常深刻.我目前的努力是对Stream类进行简短的尝试,其代码如下:
class Stream:
"""A Basic class implementing the stream abstraction. """
def __init__(self,data,funct):
self.current = data
self._f = funct
def stream_first(self):
"""Returns the first element of the stream"""
return self.current
def stream_pop(self):
"""Removes and returns the first element of the stream. """
temp = self.current
self.current = self._f(self.current)
return temp
Run Code Online (Sandbox Code Playgroud)
在那里享受适度的成功,我试图创建一个BoundedStream类,其行为基本上类似于无界的类,除了在某个点上它用完了元素.我现在的问题是,看到任何这样的有界流有一些有限数量的元素,应该可以迭代它们.如果我使用的是显式列表,我可以使用Python的in关键字和for循环来干净利落地完成.我想为自己的班级保持清洁.是否有一些我可以实现的方法,或任何其他语言功能,这将允许我这样做?任何你可能提供给新手的答案或其他帮助将不胜感激!
-大卫
PS
对于那些想知道的人来说,有界流的推动力是我尝试了内置range函数,但是Python声称我想看的范围太大了.为了提高内存效率,我转向了Streams.
Kos*_*Kos 10
对于迭代 for x in object,您需要提供一个__iter__返回新迭代器的方法.
迭代器是一个对象,它有一个方法next()(Python 2)或__next__(Python 3),它返回下一个元素或StopIteration在没有更多元素时引发异常.(迭代器也应该有一个__iter__返回自身的方法.)
提示:您通常不需要自己编写迭代器代码; 在
__iter__类上实现的最简单方法是使其成为generator function或从中返回生成器表达式(所有生成器都是迭代器).你也可以只返回从另一个对象获得的迭代器; 该iter内置有帮助这里.
对于测试if x in object,您需要提供一种__contains__方法.
进一步阅读:Python数据模型 - 模拟容器类型
| 归档时间: |
|
| 查看次数: |
1157 次 |
| 最近记录: |