Python3 三器个人理解

一:迭代器

迭代是重复反馈过程的活动,迭代器就是重复反馈过程活动的容器(python中为对象)。

迭代器从序列的第一个元素访问,中间不能后退直至所有元素被访问结束。

迭代器只有在迭代到某个元素时才计算该元素,在此之前的或之后的可以不存在或者被销毁。因此资源占比比较少。

用法:

1、使用iter(iterable)内置函数创建

>>> a=iter([1,2,3])
>>> a.__next__()
1
>>> a.__next__()
2
>>> a.__next__()
3
>>> a.__next__()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
StopIteration

2、自定义迭代器

自定义迭代器需实现__next__()和__iter__()方法。其中__next__()方法返回对象的下一个元素到最后抛出异常StopIteration;__iter__()方法返回迭代器本身self。

class TestIter(object):

    a, b, n = 1, 0, 0

    def __init__(self, my_max):
        self.max = my_max

    def __iter__(self):
        return self

    def __next__(self):
        if self.n < self.max:
            tmp = self.a
            self.b, self.a = self.a, self.a + self.b
            self.n += 1
            return tmp
        raise StopIteration


print(TestIter(5))
for i in TestIter(10):
    print(i, end='    ')

二、生成器

在Python中,一边循环一边计算的机制,称为生成器。是不是很熟悉,我们可以认为生成器是一个返回迭代器的函数。

用法:

一:列表生成器

我们只需要将列表生成器的【】改为()就可以了

>>> list_1 = [x+1 for x in range(10)]
>>> list_1
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> gen_1 = (x+1 for x in range(10))
>>> gen_1
<generator object <genexpr> at 0x000000000240BE40>
>>> gen_1.__next__()
1
>>> gen_1.__next__()
2
>>> gen_1.__next__()
3
>>> gen_1.__next__()
4

二、yield

>>> def fib(mymax):
...     n,a,b = 0,0,1
...     while n < mymax:
...         yield b
...         a,b = b,a+b
...         n += 1
...
>>> fib(5)
<generator object fib at 0x000000000248E6D0>
>>> for i in fib(10):
...     print(i)
...
1
1
2
3
5
8
13
21
34
55

三、装饰器

详情

 

posted @ 2021-07-20 16:55  老徐-lex  阅读(60)  评论(0编辑  收藏  举报