python———戏说超器

1 .できる超対象

我々が知っていたが、リスト、tuple、上升などのタイプのデータ使用for…

>>> for i in 100:
... 	print(i)
...
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'int' object is not iterable
>>>
# int整型不是iterable, 即int整型不是可以迭代的
# 我们⾃定义⼀个容器MyList⽤来存放数据, 可以通过add⽅法向其中添加数据
>>> class MyList(object):
... 	def __init__(self):
... 		self.container = []
... 	def add(self, item):
... 		self.container.append(item)
...
>>> mylist = MyList()
>>> mylist.add(1)
>>> mylist.add(2)
>>> mylist.add(3)
>>> for num in mylist:
... 	print(num)
...
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'MyList' object is not iterable
>>>
# MyList容器的对象也是不能迭代的

3 .超できる対象の本質

超対象にできる超使用過程を発生しごと(すなわち、for…

データを畳ま達の人に超器(Iterator

超できる対象の本質は我々にできるような中間」と一人が「、すなわち超器を助ける我々はその畳ま万遍暦使用。

超できる対象を通じて__iter__方法に我々超器の一つを提供して、超超できる対象の一つで、実は先をこの対象の一つの超器を提供し、そしてこの超器を通じて一次取得対象の1

言い換えれば、一つを__iter__方法の対象として、一つの超できる対象

>>> class MyList(object):
... 	def __init__(self):
... 		self.container = []
... 	def add(self, item):
... 		self.container.append(item)
... 	def __iter__(self):
... """返回⼀个迭代器"""
... # 我们暂时忽略如何构造⼀个迭代器对象
... 		pass
...
>>> mylist = MyList()
>>> from collections import Iterable
>>> isinstance(mylist, Iterable)
True
>>>
# 这回测试发现添加了__iter__⽅法的mylist对象已经是⼀个可迭代对象了

5 .どう判断一つの対象は、超器

使用isinstance()判断

In [56]: from collections import Iterator
In [57]: isinstance([], Iterator)
Out[57]: False
In [58]: isinstance(iter([]), Iterator)
Out[58]: True
In [59]: isinstance(iter("abc"), Iterator)
Out[59]

7 for…

for item in Iterable先を通じてiter()できる関数を超対象iterableの超器、そして対までを得た超機が発進next (

8 .応用シーン

超器最も核心機能は、next(関数)wkblのもとに戻るデータの値である。大量のメモリー(ラム)の空間を節約することができる

  1. テン地上波あの契数列(超器実現)
#!/usr/bin/env python
# coding=utf-8

class Fibonacci(object):
    def __init__(self, all_num):
        self.all_num = all_num
        self.current_num = 0
        self.a = 0
        self.b = 1
    
    def __iter__(self):
        return self

    def __next__(self):
        if self.current_num < self.all_num:
            ret = self.a 
            self.a, self.b = self.b, self.a + self.b
            self.current_num += 1

            return ret
        else:
            raise StopIteration


fibo = Fibonacci(10)

for num in fibo:
    print(num)

ソースネットワーク 戻る