一.迭代器总结
1. 迭代器主要就是一个迭代取值,另外一种就是索引(下标)取值。
l1 = [1, 2, 3, 4, 6]
##选择迭代对象
res = l1.__iter__()
print(res.__next__()) # 1
print(res.__next__()) # 2
print(res.__next__()) # 3
print(res.__next__()) # 4
2. 迭代取值与索引取值的区别
迭代取值: 1 .迭代取值不可以重复取值。 2. 可以在不使用索引(下标)取值下进行取值。
索引取值 : 1 .索引取值可以重复取值。2. 索引取值(l1[0])必须要有容器。
二 .生成器
1.关键字:yeild
当函数中出现了yeild,如果没有调用,那就是普通的函数,如果被调用他就是个生成器,当函数调用执行到 yeild时,则会停住。调用时会变成元组形式返回
def index():
print('form index')
print('form index')
print('form index')
print('form index')
yield 123
print('form 111')
res = index()
print(res.__next__())
利用生成器实现range功能:
def my_range(start, stop=None, step=1):
if not stop:
sopt = start
start = 0
while start > stop:
yield start
start += step
for i in range(10):
print(i)
2.生成器yeild的其他用法
def eater(name):
print('%s: 正在吃' % name)
while True:
food = yield '苹果'
print('%s: 正在吃 %s'% (name,food))
res = eater('jerry')
res.__next__()
res.send('鸡翅')
关键字 send
send既可以在yeild后面直接传,还可以直接执行__next__。
3. 生成器表达式
如果不使用数据就不会提供,目的就是为了节省内存空间。
l1 = ['kevin', 'jerry', 'tony', 'oscar']
l2 = []
res = (l1 for l1 in l2)
print(res)
res1 = (l1 for l1 in l1)
print(res1)
print(res1.__next__())
print(res1.__next__())
print(res1.__next__())
print(res1.__next__())
4.yeild 和 return 的区别
yeild:当函数执行到yeild时,会停住,yeild后面可以有多个返回值,使用元组形式返回(),yeild可以把函数变成生成器。
return当函数执行到return时,会直接停止,也有多个返回值,元组形式返回。