生成器,迭代器和reversed()函数

又看一下廖雪峰老师的网站学习一下,做一下笔记,假装我学过(搬砖)。。。

参考:廖雪峰老师官网

生成器(generator)

Generation就是不需要按照列表的形式将每个元素写到列表中,在实际中并不是所有的列表元素都可以枚举的 下面看一下怎么

要创建generator方法有很多,第一种办法比较简单,只需要把列表中的[]改为()就可以了

>>> l = [x**2 for x in range(0,10,2)]
>>> l
[0, 4, 16, 36, 64]
>>> g = (x**2 for x in range(0,10,2))
>>> g
<generator object <genexpr> at 0x000001A6E28F72B0>

list元素可以直接打印出来,生成器的打印可以使用next()获取生成器下一个返回值

>>> next(g)
0
>>> next(g)
4
>>> next(g)
16
>>> next(g)
36
>>> next(g)
64
>>> next(g)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
StopIteration

到最后生成器元素获取完毕之后会抛出一个StoryIteration的错误

但是实际上获取生成器的元素我们几乎不会使用next()方法而是使用for循环

>>> g = (x**2 for x in range(0,10,2))
>>> for i in g:
...     print(i)
...
0
4
16
36
64
>>>

但是用for循环调用generator时,发现拿不到generator的return语句的返回值。如果想要拿到返回值,必须捕获StopIteration错误,返回值包含在StopIteration的value中

>>> g = (x**2 for x in range(0,10,2))
>>> while True:
...     try:
...             x = next(g)
...             print("g : ",x)
...     except StopIteration as e:
...             print("Generator return value: ",e.value)
...             break
...
g :  0
g :  4
g :  16
g :  36
g :  64
Generator return value: None
>>>

迭代器(iterator)

① 可以使用isinstance()判断一个对象是否是Iterable对象

>>> from collections import Iterable
>>> isinstance([],Iterable)
True
>>> isinstance((),Iterable)
True
>>> isinstance({},Iterable)
True
>>> isinstance("",Iterable)
True
>>> isinstance(100,Iterable)
False
② 可以使用isinstance()判断一个对象是否是Iterator对象:可以使用isinstance()判断一个对象是否是Iterator对象

>>> isinstance(100,Iterable)
False
>>> from collections import Iterator
>>> isinstance([],Iterator)
False
>>> isinstance((),Iterator)
False
>>> isinstance({},Iterator)
False
>>> isinstance("",Iterator)
False
凡是可作用于for循环的对象都是Iterable类型

凡是可作用于next()函数的对象都是Iterator类型,它们表示一个惰性计算的序列

集合数据类型如list、dict、str等是Iterable但不是Iterator,不过可以通过iter()函数获得一个Iterator对象

reversed(seq)函数

参考菜鸟教程链接

这个函数的作用是返回一个反转的迭代器,seq可以是 tuple, string, list 或 range

>>> a = "CSDN"
>>> b = reversed(a)
>>> b
<reversed object at 0x000001A6E28DBB38>
>>> for i in b:
...     print(i)
...
N
D
S
C
>>
>>> input_size = (312,416)
>>> size = list(reversed(input_size))
>>> size
[416, 312]
>>> size = tuple(reversed(input_size))
>>> size
(416, 312)
>>

the end.

参考:廖雪峰老师官网

参考:菜鸟教程链接

猜你喜欢

转载自blog.csdn.net/li_haiyu/article/details/80452953
今日推荐