14

可迭代对象、迭代器、生成器的区别

 3 years ago
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==


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK