可迭代对象、迭代器、生成器的区别
source link: https://www.hongweipeng.com/index.php/archives/2028/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
UApjSzE0wLD3fIv55bEc1Gv/lJi+/7KkFEgAQ7+npqIuNVG0udOovAdwX3MgLQ6d
Q3xTorgOnWYVKYI+wC7Ohws9req5nKfZrz7AA9PKrNJ1ScPHTr9EF1DHjHf9fDrPBFssbvlu43B53qcZUczB60VqTzbeUjFz8c8QonSrov8cr0R2iwbjucj/kA/oLg5q
- 可迭代对象(Iterable):若对象定义了
__iter__()
或__getitem__()
方法,那该对象就是可迭代对象; - 迭代器(Iterator):若对象定义了
__next__()
和__iter__()
方法,那该对象就是迭代器; - 生成器(Generator):只要函数的定义中包含
yield
关键字,那么该函数就是生成器。
miT7DoCT/2sGA7SDaMCLRRkTnJmVMHV/PSqTSmXA1X3ax4abdR+RGj4x7+n28wNMBnmtQytZQB+ktwq4DXMofvyBpupOTJ2yLTruvivlb9wt8m7zHOHpyP1m9372JgwtM35p0hmu5eG9Xxv+QXH0kK/eaoOINMSTM/seJtnWsE3i2SSkcwh3bbjKpZCOzDtSrJ5EIcBg9HstuuYzJlFkaNEuMsI99d3cSuHK5aGL9OtbKm5bI+6FbE83sxWV+GqK
可迭代对象
CsuanU0x6ESmc4qmM9TBGSW/m1N0d4sayWHVMZlP4/1vOww/m87p/1uPhpU8VuuhjpovEkXUlQW7dbGS30IAOFHzJsLNPdn/wcuI01tQ3Y1Di5laOzNLRv6ym/TYP/ogaqftmV+vomjTkX5WhWm8KshTVv7482r2ltWGS5JufQkqYqG9JBPHcbNPDeow+P3lfijmJKon7ASqu5O2OcaX1zQcGoepDWycbIjgAfaEzyttYCo/ICWGihrKT3Efs6suRi1XR+gbLVHX2TL3cDxcVi64NiNUiT1j1xjLTzmrxlLcP8NxD+1ugJGok6Fp7DCFdbf6VSVD+8bhSbsujp5WhQxpVPljdS5G4AsvZ5DJXWQ8JniYyMauIDQnXVNLcJ2bO3f/xBNnQXkvzRNmyJ0rxhX0kBYXqkdDHodHYdQDR4Cx4y4HUwdm4MQiBLg2MrvinhoNeEvEnGVqW0X4Nu2Sv0TZoIea934FHq9Gpk+3WcjjWG1YNijOlrjUCur0T5WdKKed7+KHCLjNEmgKSJ5lh0IFDgC4YKonybPdWsFtZdnyExe4xKz/4laoXn6HWCJ4SBpHqWTdRjbEJj2iC6rlk0TySbvDOhWutQ2IVdsEPW8=
oKq6K0rPDqX5ukjPKKtHA9fd/juNQLg1JfeFUXAH5a14BeU+R4BuBOhiikLSNHjvQwYQfZvYriA3QkyyT8i2DsK02rVK5QKqvcQWaIRNFOxdFbF7ACJ9baz8MWq/k3241qlwhuvduTBhJcrBGpaKq7KqebpAAe65OzBIirHrj/AI/8GnAxFz+oL986te3EwAFL66yvw7QJqooHmzkuc3MUw3pf/9wJyhq1VjAXnM7SSZZ5z18ZJl7QDqWaMfovhIc0AYxHqqJ4B4W9GOZopVy/yjlQhigfdZX30nQ+l5QGU=
for i in iterable:
pass
# 显性调用 iter() 也是可以的,等效
for i in iter(iterable):
pass
J23qH9f1DrAt0vizEoDaoqxC3JIO7Lr02q83Emvz8CockITzS+9FJSLUFEK8vwAKqmDzqhwBCPQTeuambUEFJ6h8eCRHlkVadUbqoVhAd2BGSApz8ImbN8p1nzN5Wud3zE9vevJ1/UXtjT2vPoc+BA==
48kUJiPJBb0sfKptjbmYrcBFIQbmsuhgMBSqHwC/IN0IIgasmqYpKAKzbrxu3ROWoMqFhf8K87I+rBIQnz8ykJ1AIQAStrkeL2rou6B3q4t1dFryoKosVO8lOTMf7Gdijiy0CzOPfj7P+jx6gwz5iLXy9coX9GWAC4JxkoIYrTc2DX0RQNCkDuG7YtPvwnwNhJ2kfYjfj4Sjd0ZOvdJPlGnte0KVx2SRYisEoYLiBoC9byEs/mN0MhWEZgEAVE5Xn3c6sfiZvdQNN+0dnaoxrhM+jWBlovl8o2frDSpNfccPTJReiEs9m7Y9mOQtj0qql/okUl7ajDSnuzpjERHFcWf6RWI2epLumAlo6iug/fSVRfoNlO88wPh7Fio54WHBnBX6Lg8Ee0KpXkQbGZJiN7rqHwejVxIo/BhQGvjNTOHAXOnNqWCSRRLL0uLZ5VTDC4GE/Nnn7/3H0OTkdjRQsVF9SdhqqMtJuqC2Tckvs5r24YksZjElbbjXsZ39pSk08vC0+hiToLDLWFo5n9N4boqrMFY9wBRVUWzk71Li8EYpuwgmMQ9HDEmOqaNPaLo9dpGFike0eaiw3Ey6Cre+7NGP3A4w3o272CrYo7UQs0JpE3Kf2BUZI7FYx29sGUAwSlGtlaXR2LQ6Gk4EUeqJXrdb6xtfT57JLBV16xIEuAbF9IZtBPDGUPFTFAIvzMDadHssc9Ypu4E1Zc/Ae60nsw==
Fmk7GC6U++N5c2C1dQoyYXin0mLuW0IrN/wKGDYx/fTLpQFsAeFO8mM83rISu7u3
class EmptyIterator(object):
def __next__(self):
raise StopIteration
def __iter__(self):
return self
0bBj6DajFxeGOkEK52SifPyZJKgf2scj7920pCR3Z2247u9nPhaHSdX/6PnmUcNj0YeLqFJ86fnJ6NzO4vFLtXup5vrYNI9zi5k13cGMgXIY48rwTbtbfktFjLH5F5CoeZNl5BeJKB4hFQOjYD4X/w==
empty_iterator = EmptyIterator()
for i in empty_iterator:
pass
cJLbKl0NtjjzxgydOPdvaVkgUo/oBuuPxOT5W1a5jnWpHgzKk3UA312kYWKqGTIGOnS7+Dk/AslyU/nD7T3H3d3pweqLk5maqxQOWnYB0TAcYUfGlF+J5u+AceTts3JinjkwT73lAjtKiaADdmLv6RqPmsECw8Nso8JMfu2Q/VqQlom2lc7TT2RvSzMhbh3h1J+A+dkPGvFtY1nP/wc4u1p9v9v5miezLdsjuyGvwvIo4fCqnIsP6PAnWqAbGEIL4iOablb80xCbTjvfxH3b3gurSHGaAf8ueS7LvkvfLzjuzSwZ6kI2QodL1K5nczio
class StrIterator(object):
def __init__(self, text):
self.text = text
self.index = 0
def __next__(self):
if self.index < len(self.text):
ch = self.text[self.index]
self.index += 1
return ch
raise StopIteration
def __iter__(self):
return self
rjSR2DUgXka6SKPqK1oujWmYG879TuH45Sw52tNcbCip4gQyulC+RvIa78jnv4cv/T71WsVTG1GzPfvBmUW6xNDpt9/d9v35RPyIx/ah2SiEUrMXqjzvpc1+f+kujP2lN8h9dvYZdsgNotU4UbpJqXcA/SL1ja0mSiiQUEE9D1ieDX5fmgsKdwWd0WFbvxp8I3PSXjBEbvyO+X2ki09e+k7rLnIGhEl9M5bc9suRA0l2UkBgNYES+oNfQ9rhHNefsbc+7/MrvcN6JzDzH5jP6KSH9cBfq0xbrx5/sO4kySrnbz6DOXIm5w9opT8RqBD5SNk2XLzxVZt+y14unvm+ilIuLlJo+kiZcks8ORznntlqH1FXuBVWw5rqvM7HScj2xpbgJ3Ia7BIacH7an00P797Cz4OX51yk2JNQxE82iORjVV/JFBk/060ff72ldPDDQXomqPCmfkrs6Yey+LZk3w==
YbbcUNOGCXpfbR4kS/GACWgTzI48mjQGsG1eLU9ZI+ouyZxkIlO/uElmpzju7Nxt7+jkXRExmAavgxQVXpEosKemK0CI2dTkUaA6MU4VpatUYt8uffotGGxCS33ZtxzM2Gt8Eh3yLxhAGahxmnxAy0boyBpxRANQ8I5Gb9fu5mgtEfPUAXFe/a8MorSahdPBWE3w2yPN7zTp8ms+yc1C32olIAGKzIJH1KRfGnvKxfs=
class StrIterator(object):
def __init__(self, text):
self.text = text
def __next__(self):
for ch in self.text:
yield ch
def __iter__(self):
return self
L0zir7YHBwYRZa33kxYJteoRhEz4NvkH/ClAC6mFy88HZufKKG0GOnkVnp3iF03yZ/GESnuJp+nunFraACIu9vazmC1kqp3QDu8xIy8TI3VDgBqQTDh5MzekvDfikbGfUlpM13Mu5L+Wii83N/j+9R/NhQaHZE/bH1+elVE/bIFt/geTxACbkELyOODaBbuKVBcrBQtb+axCkyljSuhT8g==
class Generator(object):
def __iter__(self):
return self
def __next__(self):
return self.send(None)
def send(self, value):
raise StopIteration
def throw(self, typ, val=None, tb=None):
e = typ(val)
raise e
def close(self):
try:
self.throw(GeneratorExit)
except (GeneratorExit, StopIteration):
pass
hh/DFPhobnf4qxefUaBkrmOmG3dfQYhU3YkpthG6DIkSnMDvQRXt35TDSOU0JWhfmkuT7JbyR0XeK7uITPW1oQPWXA2OeIIbiGNaNr3dX3Q=
29Jk6uHSbNswhy9ECewPkn2zunCb+gwmyEc2hUXXjjPl7D8RdXdQoTrlddZ9EoztRafYg5DeJkuL5GwgUSQRYOXQ8gnEwjE45eSPGia8S2Sy/2B5K5e5hFHQY/NKAKlf1G1qsres9cD67HOc/56Da0NAIstE6vrNntYS4YEmuFeVzbM1/YgpMr8F/nCHKWvf9Ye3WsBQYKu+SQHhrr84Lmx+Pya61fAmFptI41MrFcRKTUvi1UkFzHV6b19nLMLGxLXE5HLjii5AkaaMl0z2ncCHr9KD/QyK76JcikZx6XDCxts6kwebtKFFKgrjHtYv4lZkj1xV6GeoBwYl4WFSLgtKV0w/bKklvfgVAOk1YZhOIpp5hBF/qvi2di+ZEx8RBDWL8Pg1UT2njy7Kp/Wm3eJOJZ+GeIV1TuTO9bkpR9BCgUcJMN9vxSYWNebqdSM6CvXjUYC7T/SC/b7/qRCYHlD8qe2/PHo+hkYd9ttQziuRfJGYdu5KhxNtFIxw6pR1RvNKKpd2OE1LDzLKnUyYYg==
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK