测试开发-晋级之路2(推导式、迭代器和生成器)

一、推导式

1.列表推导式

需求:如何快速生成0-100的列表
方法一:while循环

list1 = []
while i in range(101):
    list1.append(i)
    i += 1
print('list1的值为',list1)

方法二:FOR循环

list2 = []
for i in range(101):
    list2.append(i)
print('list2的值为:',list2)

方法三:列表推导式

list3 = [i for i in range(101)]
print('list3的值为:',list3)

2.字典推导式

对于字典,它和列表、元组一样,也可以使用字典推导式来快速的生成一个字典,它的表现形式和列表推导式类似,只不过将列表推导式中的中括号[]改为大括号{}:

字典推导式的格式和列表推导式的格式基本相同,具体格式如下:
dictionaryname={key-Expression:value-Expression for循环语句}

例子:

str = 'dagertsadadas'
dic = {k:str.count(k) for k in str }print(dic)

例子2

nickname = ['钻天鼠','彻地鼠','穿山鼠','翻江鼠','锦毛鼠']
name = ['卢方','韩彰','徐庆','蒋平','白玉堂']
dic2 = {i[0]:i[1] for i in zip(nickname,name)}
print(dic2)

3.生成器表达式

优点:节约内存

使用next()进行取值

tu = (i for i in range(10))
print(tu)

输出结果,返回结果为生成器

<generator object <genexpr> at 0x000001C8A129C1B0>

还可以在函数中使用yield来生成,如:

def func():
    for i in range(1,5):
        yield i

什么是迭代器?
迭代器的范围比生成器更广,只要能够通过next()进行取值的都是迭代器。

迭代器协议

1、迭代协议
1.1、迭代协议:一种是包含iter方法的,另一种是包含getitem方法的(比如str对象就没有iter方法,但是一样能够迭代),只要对象中包含了这两种方法的任意一种,那么这个对象就可以进行迭代操作,也就是实现了迭代协议。
1.2、迭代器协议:
实现了迭代器协议的对象(实现方式:对象内部定义了一个iter()方法)
对象实现了__next__方法
__next__方法返回了某个数值(当然一般情况下,我们需要的是返回这个对象的特定的数字,并且按照一定的顺序进行依次返回)
__next__方法需要在值取完的时候,抛出stopiteration的错误信息。
1.3.可迭代对象:只要内部实现了迭代协议的就是一个可迭代对象(可迭代对象可以进行相关的迭代操作,比如for循环map函数等等)

所有的迭代器都是是可迭代对象

可迭代对象:能够通过for循环遍历的都是可迭代对象,可迭代对象内部只实现了__iter__方法

迭代器:内部实现了__iter__,__next__方法

生成器:生成器是迭代器的一种,在迭代器基础上增加了send(),close(0,throw() 方法
send方法:用于生成器方法

那么生成器和生成器有什么好处呢?生成器并不会一下子把所有的数据全部生成出来,生成器中保存的只是一个生成数据的相关算法,并不会把所有的数据都生成出来,只是在我们需要数据的时候,用生成器去生成一条数据就可以了,这样的话就节约了大量的内存空间。

4、生成器和迭代器的区别:

生成器属于迭代器的一种,如何区分迭代器和生或器?
1、生成器相比迭代器多了三种方法:send(), close(), throw()
send()方法。发送数据
close()方法:关闭生成器
throw()方法:
gen.throw(Exception, “Method throw called!”)

生成器<迭代器<可迭代对象

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值