1. 生成器的3中创建方法
1.通过生成器函数(函数中包含了yield的就是生成器函数,注意:生成器函数被执行. 获取到的是生成器. 而不是函数的执行 )
2.通过生成器表达式创建生成器((结果 for 变量 in 可迭代对象 if 筛选))
3.通过数据转换
2. 了解return和yield的区别
return
代码块
def func():
res=[]
for i in range(10):
res.append(i)
return res
f=func()
print(f) #[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
yield
代码块
def func2():
for i in range(10):
yield i
f2=func2()
# print(f2) #<generator object func2 at 0x007CAA70>
print(f2.__next__()) #0
print(f2.__next__()) #1
print(f2.__next__()) #2
print(f2.__next__()) #3
3. send()和.next()的区别
二者都可以让函数向下执行一步,但是send()中的括号还可以给yield赋值,第一个不能用send(),最后一个也不能用send()
代码块
def func():
print('嫦娥妹子')
a=yield 11
print(a)
print('后羿哥哥')
b=yield 22
print(b)
print('跨服爷爷')
yield 33
g=func()
print(g.__next__())
print(g.send('hello'))
print(g.send(666))
#执行结果:
# 嫦娥妹子
# 11
# hello
# 后羿哥哥
# 22
# 666
# 跨服爷爷
# 33
4. 生成器转换为列表
代码块
def func():
yield 11
yield 22
yield 33
yield 44
yield 55
f=func() #实例化,获取生成器
lst=list(f) #把生成器转换为列表
print(lst) #[11, 22, 33, 44, 55]
5. 生成一个1—14的列表
方法1:利用for循环
代码块
res=[]
for i in range(1,15):
res.append(i)
print(res)
方法2:带有条件的列表推倒式
代码块
res=[i for i in range(1,15)]
print(res)
6. 寻找名字中带有2个h的名字
代码块
name=['wangsiyu','nezha','wahaha','huluhua']
for i in name:
if i.count('h')==2:
print(i)
7. 生成器表达式
代码块
res=('今天是我面试的第%s次'%i for i in range(1,20))
print(res) #<generator object <genexpr> at 0x00E7AB70>,生成器地址
for i in res:
print(i)
#结果如下
# 今天是我面试的第1次
# 今天是我面试的第2次
# 今天是我面试的第3次
# 今天是我面试的第4次
# 今天是我面试的第5次
# 今天是我面试的第6次
# 今天是我面试的第7次
# 今天是我面试的第8次
# 今天是我面试的第9次
# 今天是我面试的第10次
# 今天是我面试的第11次
# 今天是我面试的第12次
# 今天是我面试的第13次
# 今天是我面试的第14次
# 今天是我面试的第15次
# 今天是我面试的第16次
# 今天是我面试的第17次
# 今天是我面试的第18次
# 今天是我面试的第19次
8. 字典倒退式(将字典的key和value互换位置)
方法1
代码块
dic={'name':'wangsiyu','gender':'male'}
new={}
for k,v in dic.items():
new[v]=k
print(new)
方法2
代码块
dic={'name':'wangsiyu','gender':'male'}
new={dic[k]: k for k in dic.keys()}
print(new)
9. 字典倒推式
代码块
lst1=['wangsiyu','linhao','qiujianfeng']
lst2=['8686','2475','3451']
dic={lst1[i]:lst2[i] for i in range(len(lst2))}
print(dic) #{'wangsiyu': '8686', 'linhao': '2475', 'qiujianfeng': '3451'}
10. 集合倒推式
代码块
lst1=['wangsiyu','linhao','qiujianfeng''8686','2475','2475','3451']
set={i for i in lst1}
print(set) #{'3451', 'linhao', 'wangsiyu', '2475', 'qiujianfeng8686'}
别跑,点个赞再走






网友评论