{"id":196,"date":"2023-02-09T10:23:25","date_gmt":"2023-02-09T02:23:25","guid":{"rendered":"https:\/\/www.peijun.site\/?p=196"},"modified":"2024-01-10T10:48:22","modified_gmt":"2024-01-10T02:48:22","slug":"6-%e8%bf%ad%e4%bb%a3%e5%99%a8","status":"publish","type":"post","link":"https:\/\/www.peijun.site\/index.php\/2023\/02\/09\/6-%e8%bf%ad%e4%bb%a3%e5%99%a8\/","title":{"rendered":"6.\u8fed\u4ee3\u5668"},"content":{"rendered":"<p>&nbsp;<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\">'''\r\n\u8fed\u4ee3\u5668\r\n\r\n\u8fed\u4ee3\u662f\u8bbf\u95ee\u96c6\u5408\u5143\u7d20\u7684\u4e00\u79cd\u65b9\u5f0f\u3002\r\n\u8fed\u4ee3\u5668\u662f\u4e00\u4e2a\u53ef\u4ee5\u8bb0\u4f4f\u904d\u5386\u7684\u4f4d\u7f6e\u7684\u5bf9\u8c61\u3002\r\n\u8fed\u4ee3\u5668\u5bf9\u8c61\u4ece\u96c6\u5408\u7684\u7b2c\u4e00\u4e2a\u5143\u7d20\u5f00\u59cb\u8bbf\u95ee\uff0c\u76f4\u5230\u6240\u6709\u7684\u5143\u7d20\u88ab\u8bbf\u95ee\u5b8c\u7ed3\u675f\u3002\u8fed\u4ee3\u5668\u53ea\u80fd\u5f80\u524d\u4e0d\u4f1a\u540e\u9000\u3002\r\n\r\n\u53ef\u8fed\u4ee3\u5bf9\u8c61\r\n\u6211\u4eec\u5df2\u7ecf\u77e5\u9053\u53ef\u4ee5\u5bf9list\u3001tuple\u3001str\u7b49\u7c7b\u578b\u7684\u6570\u636e\u4f7f\u7528for...in...\u7684\u5faa\u73af\u8bed\u6cd5\u4ece\u5176\u4e2d\u4f9d\u6b21\u62ff\u5230\u6570\u636e\u8fdb\u884c\u4f7f\u7528\uff0c\u6211\u4eec\u628a\u8fd9\u6837\u7684\u8fc7\u7a0b\u79f0\u4e3a\u904d\u5386\uff0c\u4e5f\u53eb\u8fed\u4ee3\u3002\r\n\r\n\u53ef\u4ee5\u4f7f\u7528 isinstance() \u5224\u65ad\u4e00\u4e2a\u5bf9\u8c61\u662f\u5426\u662f Iterable \u5bf9\u8c61\uff1a\r\n&gt;&gt;&gt; from collections.abc import Iterable\r\n&gt;&gt;&gt; isinstance([], Iterable)\r\nTrue\r\n&gt;&gt;&gt; isinstance({}, Iterable)\r\nTrue\r\n&gt;&gt;&gt; isinstance('abc', Iterable)\r\nTrue\r\n&gt;&gt;&gt; isinstance(mylist, Iterable)\r\nFalse\r\n&gt;&gt;&gt; isinstance(100, Iterable)\r\nFalse\r\n\r\n\r\n\u7b80\u5355\u6765\u8bf4\uff0c\u4e00\u4e2a\u5177\u5907\u4e86__iter__\u65b9\u6cd5\u7684\u5bf9\u8c61\uff0c\u5c31\u662f\u4e00\u4e2a\u53ef\u8fed\u4ee3\u5bf9\u8c61\u3002\r\nclass MyList(object):\r\n     def __init__(self):\r\n             self.container = []\r\n     def add(self, item):\r\n             self.container.append(item)\r\n     def __iter__(self):\r\n             \"\"\"\u8fd4\u56de\u4e00\u4e2a\u8fed\u4ee3\u5668\"\"\"\r\n             # \u6211\u4eec\u6682\u65f6\u5ffd\u7565\u5982\u4f55\u6784\u9020\u4e00\u4e2a\u8fed\u4ee3\u5668\u5bf9\u8c61\r\n             pass\r\n\r\n&gt;&gt;&gt; mylist = MyList()\r\n&gt;&gt;&gt; from collections import Iterable\r\n&gt;&gt;&gt; isinstance(mylist, Iterable)\r\nTrue\r\n\r\n\r\niter()\u51fd\u6570\u4e0enext()\u51fd\u6570\r\nlist\u3001tuple\u3001str\u3001set\u3001dict\u90fd\u662f\u53ef\u8fed\u4ee3\u5bf9\u8c61\uff0c\u6211\u4eec\u53ef\u4ee5\u901a\u8fc7iter()\u51fd\u6570\u83b7\u53d6\u8fd9\u4e9b\u53ef\u8fed\u4ee3\u5bf9\u8c61\u7684\u8fed\u4ee3\u5668\u3002\r\n\u7136\u540e\u6211\u4eec\u53ef\u4ee5\u5bf9\u83b7\u53d6\u5230\u7684\u8fed\u4ee3\u5668\u4e0d\u65ad\u4f7f\u7528next()\u51fd\u6570\u6765\u83b7\u53d6\u4e0b\u4e00\u6761\u6570\u636e\u3002\r\niter()\u51fd\u6570\u5b9e\u9645\u4e0a\u5c31\u662f\u8c03\u7528\u4e86\u53ef\u8fed\u4ee3\u5bf9\u8c61\u7684__iter__\u65b9\u6cd5\u3002\r\n\r\n&gt;&gt;&gt; li = [11, 22, 33, 44, 55]\r\n&gt;&gt;&gt; li_iter = iter(li)\r\n&gt;&gt;&gt; next(li_iter)\r\n11\r\n&gt;&gt;&gt; next(li_iter)\r\n22\r\n&gt;&gt;&gt; next(li_iter)\r\n33\r\n&gt;&gt;&gt; next(li_iter)\r\n44\r\n&gt;&gt;&gt; next(li_iter)\r\n55\r\n&gt;&gt;&gt; next(li_iter)\r\nTraceback (most recent call last):\r\n  File \"&lt;stdin&gt;\", line 1, in &lt;module&gt;\r\nStopIteration\r\n\r\n\r\n'''\r\n\r\n\r\nclass MyList():\r\n    def __init__(self):\r\n        self.items = []\r\n    \r\n    def add(self, val):\r\n        self.items.append(val)\r\n\r\n    def __iter__(self):\r\n        return MyIterator(self)\r\n\r\nclass MyIterator(object):\r\n    '''\u81ea\u5b9a\u4e49\u4f9bMyList\u4f7f\u7528\u7684\u4e00\u4e2a\u8fed\u4ee3\u5668'''\r\n    def __init__(self, mylist):\r\n        self.list = mylist\r\n        self.current = 0\r\n    \r\n    def __next__(self):\r\n        if self.current &lt; len(self.list.items):\r\n            item = self.list.items[self.current]\r\n            self.current += 1\r\n            return item\r\n        else:\r\n            raise StopIteration\r\n\r\n    def __iter__(self):\r\n        return self\r\n\r\n\r\n\r\nclass FibIterator(object):\r\n    '''\u6590\u6ce2\u90a3\u5951\u6570\u5217\u8fed\u4ee3\u5668'''\r\n    def __init__(self, n: int):\r\n        '''\r\n        :param n: int, \u751f\u6210\u6570\u5217\u7684\u524dn\u4e2a\u6570\r\n        '''\r\n        self.n = n\r\n        self.current = 0\r\n        # \u4fdd\u5b58\u524d\u524d\u4e00\u4e2a\u6570\uff0c\u521d\u59cb\u503c\u4e3a\u6570\u5217\u4e2d\u7684\u7b2c\u4e00\u4e2a\u65700\r\n        self.num1 = 0\r\n        # \u4fdd\u5b58\u524d\u4e00\u4e2a\u6570\uff0c\u521d\u59cb\u503c\u4e3a\u6570\u5217\u4e2d\u7684\u7b2c\u4e8c\u4e2a\u65701\r\n        self.num2 = 1\r\n\r\n    def __next__(self):\r\n        \"\"\"\u88abnext()\u51fd\u6570\u8c03\u7528\u6765\u83b7\u53d6\u4e0b\u4e00\u4e2a\u6570\"\"\"\r\n        if self.current &lt; self.n:\r\n            num = self.num1\r\n            self.num1, self.num2 = self.num2, self.num1 + self.num2\r\n            self.current += 1\r\n            return num\r\n        else:\r\n            raise StopIteration\r\n    \r\n    def __iter__(self):\r\n        \"\"\"\u8fed\u4ee3\u5668\u7684__iter__\u8fd4\u56de\u81ea\u8eab\u5373\u53ef\"\"\"\r\n        return self\r\n\r\n\r\nif __name__ == '__main__':\r\n    # list = MyList()\r\n    # list.add(1)\r\n    # list.add(2)\r\n    # list.add(3)\r\n    # list.add(4)\r\n    # list.add(5)\r\n\r\n    # for n in list:\r\n    #     print(n)\r\n\r\n    fib = FibIterator(n=10)\r\n    for n in fib:\r\n        print(n)\r\n    \r\n    l = list(FibIterator(n=20))\r\n    print(l)\r\n\r\n    tp = tuple(FibIterator(n=15))\r\n    print(tp)<\/pre>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u8fed\u4ee3\u5668\u662f\u4e00\u4e2a\u53ef\u4ee5\u8bb0\u4f4f\u904d\u5386\u7684\u4f4d\u7f6e\u7684\u5bf9\u8c61\u3002<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5],"tags":[],"_links":{"self":[{"href":"https:\/\/www.peijun.site\/index.php\/wp-json\/wp\/v2\/posts\/196"}],"collection":[{"href":"https:\/\/www.peijun.site\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.peijun.site\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.peijun.site\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.peijun.site\/index.php\/wp-json\/wp\/v2\/comments?post=196"}],"version-history":[{"count":1,"href":"https:\/\/www.peijun.site\/index.php\/wp-json\/wp\/v2\/posts\/196\/revisions"}],"predecessor-version":[{"id":197,"href":"https:\/\/www.peijun.site\/index.php\/wp-json\/wp\/v2\/posts\/196\/revisions\/197"}],"wp:attachment":[{"href":"https:\/\/www.peijun.site\/index.php\/wp-json\/wp\/v2\/media?parent=196"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.peijun.site\/index.php\/wp-json\/wp\/v2\/categories?post=196"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.peijun.site\/index.php\/wp-json\/wp\/v2\/tags?post=196"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}