python生成器推导式的结果是什么_python基础(生成器、列表推导式)

一、 生成器:

1.1 特点:

生成器的本质就是一个迭代器

生成器一定是一个迭代器,迭代器不一定是一个生成器

生成器是可以让程序员自己定义的一个迭代器

生成器的好处,节省内存空间

生成器的特性继承迭代器特性:一次性的,惰性机制,从上向下

1.2 生成器的普通方法:

#方式一:

#每次创建一个新的生成器对象

deffunc():print(111)yield 5

print(222)yield 10

print(func().__next__()) #每次创建一个新的生成器对象

print(func().__next__())#方式二:

#只创建一个生成器

deffunc():print(111)yield 5 #碰到yield不结束就挂起

print(222)yield 10generator= func() #只创建一个生成器

print(generator.__next__()) #第一次打印 111 5 生成器停在yield 5 处 挂起

print(generator.__next__()) #第二次打印 222 10 生成器停在yield 10 处 挂起

print(generator.__next__()) #第三次无法找到新的生成器,报错

#python2 next() iter()#python3 next() __next__() iter() __iter__()

#方式三:

next() == generator.__next__() 方法相同deffunc():print(111)yield 5

print(222)yield 10generator=func()print(next(generator)) #第一次打印 111 5 生成器停在yield 5 处

print(next(generator)) #第二次打印 222 10 生成器停在yield 10 处

print(next(generator)) #第三次无法找到新的生成器,报错

View Code

1.3 生成器的send()方法:

1.3.1 特点:

第一次调用生成器的时候使用send里边的值必须是None,建议一般第一次获取生成器时使用.__next__() 方法

1.3.2 范式:

#第一次调用生成器的时候使用send里边的值必须是None,一般第一次获取生成器时使用__next__

#范式

deffunc():print(111)

a= yield 5 #1.挂起 2.返回值 3.接收值

print(a) #123

print(222)

b= yield 10

print(b)

generator=func()print(generator.send(None)) #第一次使用send必须为None

print(generator.send('123')) #第一次传参获取yield位置,send = next() + 传值

print(generator.send('456')) #第二次传参获取yield位置

aa= generator.__next__() #aa=123

print(aa + 5) #生成器返回参数

print(generator.__next__())

View Code

1.4 生成器的from()方法:

1.4.1  特点:

将可迭代对象元素逐个返回

#生成器from方法:#yield from 将可迭代对象元素逐个返回

deffunc():

lst= [1, 2, 3, 4, 5]

lst1= [6, 7, 8, 9]#for index in lst: # 普通方法执行yield方法

#yield index

yield from lst #yield from 方法实现

yield from lst1 #第二个yield from

g=func()print(next(g)) #1

print(next(g)) #2

print(next(g)) #3

print(next(g)) #4

print(next(g)) #5

print(next(g)) #6

print(next(g)) #7

print(next(g)) #8

print(next(g)) #9

View Code

二、 列表推导式:

2.1 推导式类型:

列表

集合 {1,2,3}

字典 {1:2,2:4}

2.2 推导式的特点:

实现小的需求时可以使用推导式,推导式节省代码

推导式不要写太长,可读性差

2.3 推导式的常用方法:

2.3.1 样式:

[结果 语法] #容器 列表推导式

{结果 语法} #容器 字典推导式或集合推导式

(结果 语法) # 生成器推导式

2.3.2 列表推导式:

#列表推导式:

#方式一:#[结果 语法]

li = [] #普通实现方法:

for i in range(10):

li.append(i)print(li)print([i for i in range(10)]) #推导式实现方法

#方式二:#[结果 语法 条件]

li =[]for i in range(10):if i%2 == 1:

li.append(i)print(li)print([i for i in range(10) if i%2 == 0]) #过滤(筛选)条件

#方式三:#[最后一个语法的结果 语法 语法]

li = [] #实现for嵌套循环方法:

for i in range(10):for em in range(3):

li.append(em)print(li)print([j for i in range(10) for em in range(3) for j in range(5)]) #推导式循环

View Code

2.3.3 集合与字典推导式:

#集合推导式

#{结果 语法} 容器

s = {i for i in range(10)} #生成一个集合

print(s)#字典推导式:

print({i:i+1 for i in range(10)}) #生成一个字典

View Code

2.3.4 生成器推导式:

注意: 生成器推导式类似于元组,但并不存在元组推导式!

#生成器推导式#注意只有生成器推导式(没有元组推导式)

g= (i for i in range(4))print(g) # at 0x00000150D6D20EB8>

print(g.__next__()) #0

print(g.__next__()) #1

print(g.__next__()) #2

print(g.__next__()) #3

View Code

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值