emmm,搜了一下好多内容描述都不太准确。
本文code在 https://blog.csdn.net/weixin_30952535/article/details/101121306 的代码基础上更改。
__iter__与__next__同时出现
class A():
def __init__(self,num1):
self.num1=num1
def __iter__(self):
return self
def __next__(self):
if self.num1<10:
self.num1=self.num1+2
else:
raise StopIteration
self.num2=self.num1+10
return self.num1,self.num2
def K(self):
self.num3=500*self.num1
return self.num3
c=A(2)
for i in c:
print(i)
print()
print(c.K())
输出
(4, 14)
(6, 16)
(8, 18)
(10, 20)
5000
for … in… 这个语句其实做了两件事。第一件事是获得一个可迭代器,即调用了__iter__()函数。
第二件事是循环的过程,循环调用__next__()函数。
对于test这个类来说,它定义了__iter__和__next__函数,所以是一个可迭代的类,也可以说是一个可迭代的对象(Python中一切皆对象)。
只有__next__出现
class A():
def __init__(self,num1):
self.num1=num1
def __next__(self):
if self.num1<10:
self.num1=self.num1+2
else:
raise StopIteration
self.num2=self.num1+10
return self.num1,self.num2
def K(self):
self.num3=500*self.num1
return self.num3
c=A(2)
for i in range(4):
print(c.__next__())
print(c.K())
输出
(4, 14)
2000
(6, 16)
3000
(8, 18)
4000
(10, 20)
5000