python - 如何使自定义类与 Python 中的“for in”循环一起使用?
问题描述
如果我有一个自定义类,如何使它与“for in”循环一起使用,如下所示:
class number_range:
def __init__(self, start, end):
self.__data = []
for i in range(start, end):
self.__data.append(i)
#something that will allow the for in loop
numbers = number_range(1, 100)
for number in numbers:
print(number)
解决方案
您正在寻找的是一个迭代器。例如,这个行为类似于范围,但只给你奇数:
class oddrange(object):
def __init__(self, first, lastPlusOne):
# Ensure start at first odd >= given start, store terminator.
self.__curr = first + 1 - first % 2
self.__term = lastPlusOne
def __iter__(self):
return self
def __next__(self):
# Terminate if range over, otherwise return current, calculate next.
if self.__curr >= self.__term:
raise StopIteration()
(cur, self.__curr) = (self.__curr, self.__curr + 2)
return cur
您可以通过调用代码看到这一点:
for i in oddrange(-5, 9): print(i, end = ' ')
print()
for i in oddrange(-3, 9): print(i, end = ' ')
print()
for i in oddrange(-4, 10): print(i, end = ' ')
print()
for i in oddrange(-4, 10): print(i, end = ' ')
print()
这会产生:
-5 -3 -1 1 3 5 7
-3 -1 1 3 5 7
-3 -1 1 3 5 7 9
-3 -1 1 3 5 7 9
请注意,这与网络上的许多示例不兼容 Python 2。我认为我们都接受 Python 2 已经完成的事实已经过去了,然后继续前进:-)
如果你真的需要它,你可以把它添加到类中:
def next(self): return self.__next__()
推荐阅读
- wordpress - 如何更改woocommerce商店页面详细信息?
- emacs - 避免注释行将光标移动到标题的开头(ORGMODE)
- spring-boot - 使用自定义存储库作为 CRUD 实现
- javascript - 反应无限渲染循环
- javascript - React Native 如何
在 flex 方向行内使用 - html - 什么是 MSO?[电子邮件模板 Outlook HTML]
- css - 在bookdown gitbook中更改R块背景颜色
- excel - 硬编码一个简单的 4X3 数组
- javascript - 根据用户选择的下拉条件(几个条件)进行 React JS 过滤
- javascript - 标记“&&”在此版本中不是有效的语句分隔符