【迭代器-生成器】

可迭代对象:内部含有“__iter__”方法的数据就是可迭代对象(str,list,tuple,set,dict,range(),文件句柄)

迭代器:内部含有"__iter__"方法并且含有“__next__”方法的就是迭代器(1.非常节省内存,2.满足惰性机制,3一条路走到黑)

字符串不是迭代器,只是可迭代对象

# # print(dir(s1))
# print('__iter__' in dir(s1))

# f1 = open('regsiter', encoding='utf-8')
# print('__iter__' in dir(f1))
# print('__next__' in dir(f1))
# f1.close()

# l1 = [1, 2, 3, 'alex']
# iter1 = l1.__iter__()
# while 1:
# try:
# print(iter1.__next__())
# except StopIteration:
# break

# 利用while循环模拟for循环 的机制。
 1, 将可迭代对象转化成迭代器
 2, 利用next 进行取值
 3, 利用异常处理终止循环。

生成器:自己用python代码写的迭代器,本质就是迭代器

1.函数是写法2.生成器表达式

def func1():
yield "你 够可以的"
yield 2
g=func1()#生成器对象
print(g)
print(g.__next__())
print(g.__next__())

return:结束函数,给函数返回值。yield:不会结束生成器函数,next对应一个yield进行取值

# 列表推导式
# 凡是用列表推导式能构建的数据,python代码都可以构建,列表推导式不能构建的数据,python代码异可以构建

原文地址:https://www.cnblogs.com/bonnyxinxin/p/13042247.html