ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Python3 三器个人理解

2021-07-20 17:00:07  阅读:168  来源: 互联网

标签:__ ... .__ 迭代 self next 三器 理解 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

三、装饰器

详情

 

标签:__,...,.__,迭代,self,next,三器,理解,Python3
来源: https://www.cnblogs.com/half-way-programmer/p/15035803.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有