- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
使用__iter__
有什么好处? Python 类中的函数?
在下面的代码中,我只是设置两个简单的类。第一类接受一个列表作为参数,我可以在不使用 __iter__
的情况下循环这个列表。功能。第二位代码使用 __iter__
函数循环遍历列表。
使用__iter__
有什么好处?当已经有方法可以循环类中的内容时?
EG 1: no __iter__
class test_class:
def __init__(self, list):
self.container_list = list
def print (self):
a = self.container_list
return a
test_list = test_class([1,2,3,4,5,6,7])
x = test_class.print(test_list)
for i in x:
print (i)
EG 2: yes __iter__
class list_using_iter:
def __init__(self):
self.list = [1,2,3,4]
self.index = -1
def __iter__(self):
return self
def __next__(self):
self.index += 1
if self.index == len(self.list):
raise StopIteration
return self.list [self.index]
r = list_using_iter()
itr = iter(r)
print(next(itr))
print(next(itr))
print(next(itr))
print(next(itr))
print(next(itr)) # Raises the exception!
最佳答案
您的第一个示例不可迭代,但包含一个可迭代的属性。您的第二个示例是可迭代的,但您只需“跟随”另一个可迭代即可进行迭代。下面是一个可迭代的示例,它本身可以完成更多工作:
import itertools
class Fibs:
def __init__(self, a, b):
self.a = a
self.b = b
def __iter__(self):
a = self.a
b = self.b
while True:
yield a
a, b = b, a + b
real_fibs = Fibs(0,1)
for i in itertools.islice(real_fibs, 10):
print(i)
Fibs.__iter__
并不是简单地反刍从其他值的 __iter__
方法获得的值;它根据需要计算并产生新值。
实际上,前面的例子是一个类知道如何创建自己的迭代器,而不是让每个对象都可迭代。这是一个定义 next
本身的版本。
class Fibs:
def __init__(self, a, b):
self.a = a
self.b = b
def __iter__(self):
return self
def __next__(self):
rv = self.a
self.a, self.b = self.b, self.a + self.b
return rv
关于Python 类和 __iter__,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46410672/
我正在实现本质上是一个容器对象(尽管它确实有一些自己的逻辑)。我希望能够迭代此类(这只是一个普通列表)中的一个字段中的项目。我应该为我的类(class)重新实现 __iter__ 和 next 还是可
本人python水平很差,请不要打我。 >>> a = ['a', 'b', 'c'] >>> a.__iter__() >>> a.__iter__().__iter__() 我看到这两个 li
在 python 2.7 和 python 3.7 中,我可以执行以下操作: string = "hello world" for letter in string: print(letter
假设我有一个基类: class Base: A = False B = '' C = '' def __iter__(self): yield 'a',
Python 类定义中的 __iter__ 方法主体有何意义?据我了解, __iter__ 方法必须返回一个迭代器;那么每个 __iter__ 方法不应该只包含一个返回迭代器(在其他地方定义)的 re
我正在尝试创建一个二维数组类并希望使矩阵可迭代。有谁知道该怎么做?我是 python 类(class)的新手,但仍在掌握窍门。另外,如何在我的 main 中实现 str ?如果我只使用 print(c
我读了一本有关 Python 高级主题的书。作者试图解释生成器。 这是他要解释的例子: class rev: def __init__(self,data): self.dat
不确定标题是否清楚,但我有一个对象,它的属性是另一种对象的字典。键是引用对象的 id。我想实现 iter 方法,以便生成这些 key ,但我不确定如何操作。它应该相当简单,但我在 python 文档中
def __init__(self, maximum, start=0, step=1): """Sets the maximum, start, and step"""
我想做的是重用生成器 class Rect(object): ... def __iter__(self): for y in xrange(self.tl.y, self.
使用__iter__有什么好处? Python 类中的函数? 在下面的代码中,我只是设置两个简单的类。第一类接受一个列表作为参数,我可以在不使用 __iter__ 的情况下循环这个列表。功能。第二位代
我不明白为什么 __iter__ 特殊方法只返回调用它的对象(如果它是在迭代器上调用的)。它本质上只是一个标志,表明该对象是一个迭代器吗? 编辑:实际上,我发现“这是允许容器和迭代器与 for 和 i
我有一个对象子类,它使用缓存生成器实现动态调度 __ iter __(我还有一个使 iter 缓存无效的方法),如下所示: def __iter__(self): print("iter ca
尽管阅读了它,但我仍然不太明白 __iter__ 是如何工作的。什么是简单的解释? 我见过 def__iter__(self): return self。我看不到它是如何工作的,也不知道它是如何工作的
我正在实现搜索算法 (BFS) 并具有以下 Node 类: class Node: def __init__(self, state=None, action=None, path_cost=
我有一个 Python 2.7 类(称之为 Child),它是另一个类(Parent)的子类,而另一个类本身就是 dict 的子类。 我正在尝试定义 __iter__在 child 中希望当有人做di
我想将一个类的所有实例存储在一个列表中,并想对其进行迭代。 我尝试了以下两种方法: 1 使用元类 class ClassIter(type): def __iter__(cls):
来源 def flags(*opts): keys = [t[0] for t in opts] words = [t[1] for t in opts] nums = [2*
假设您使用包装器对象: class IterOrNotIter: def __init__(self): self.f = open('/tmp/toto.txt')
我有一个标准的二叉树,如下所示 1 /\ 2 3 /\/\ 4 5 6 7 我需要通过导入我的树类来读取二叉树,创建这棵树,然后使用 for 循环读取它,如:[4, 2, 5, 1, 6, 3, 7]
我是一名优秀的程序员,十分优秀!