初识python----生成器与迭代器

一、生成器

1.1 什么是生成器

在开始学习生成器之前,我们得先知道,生成器不会直接得开辟内存空间,其次,调用生成器得方法为:next(),下面我们来看一个例子:

s = (i for i in range(10)) # 列表生成式
print(s)
print(type(s)) # 查看S的类型

print(next(s))
print(next(s))
print(next(s))
print(next(s))
print(next(s))
print(next(s))

# 输出结果
<generator object <genexpr> at 0x000001BD1F1BFA50>
<class 'generator'>
0
1
2
3
4
5

输出结果中,generator 称为生成器对象,需要用next方法去获取其中的内容,此外,生成器就是一个可迭代对象,其本质是一个函数,将其中的内容存档,需要使用时使用外部方法去获取其中的数据。下面,我们来学习生成器的创建方式。

1.2 生成器的创建方式

1.2.1 列表生成式创建

该方法在上面已经演示过·,这里就不再赘述

1.2.2 yield 关键字创建

首先,来看下面的例子

def f():
    print('f1')
    yield 1  
    print('f2')
    yield 2


for i in f():
    print(i)


# 输出结果
f1
1
f2
2

该例子中使用yield关键字创建了两个生成器,其内容分别是1和2,再使用for循环遍历取出,因此打印结果如图所示。在之前几期中我们已经知道,for循环后面跟的是可迭代对象,故而生成器就是可迭代对象,其次,区分可迭代对象的方法共有两种:

  • 从现象来看,只要是可以for循环的都是可迭代对象
  • 从本质来看,是内置有iter方法的是可迭代对象

for循环后面都是跟的有iter方法,能循环时因为内部有一个iter方法,下面来看一个例子:

l = [1,2,3,4]
l.__iter__()
t = (1,2,3)
t.__iter__()
d = {'name':'python'}
d.__iter__()

该例中,不论列表,元组还是字典,其后都有一个iter方法,因此其均是可迭代对象。

此外,注意一下yield和return的区别:

return:在函数中返回某个值,然后函数结束运行,一般没有返回值类型,就不用写

yield:带yield的函数是一个生成器,在函数内部碰到这个yield的时候,函数就会返回某个值,当

下次执行函数后,会在上次停留的位置继续运行,就相当于是存档

好,下面来学习迭代器

二、迭代器

2.1 什么是迭代器

1.有iter方法

2.有next方法

迭代器对象:iterator,iter方法其实只做了一件事,那就是返回一个迭代器

下面我们来看一个例子:

list1 = [1,2,3,4]
d = iter(list1)
print(d)
print(next(d))
print(next(d))
print(next(d))
print(next(d))


# 输出结果 
<list_iterator object at 0x00000177CBBB21F0>
1
2
3
4

可以看出,对list1使用iter方法后,其就转变为了一个·迭代器,可以用next方法获取其中的内容。

好,这就是本期的所有内容,如果有错误或者需要修改的地方,欢迎指出,下期见~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值