迭代器和生成器

# 迭代器的概念(优点:可遍历容器里的元素,省内存空间,随着循环生成)
# 迭代器协议 —— 内部含有__next__和__iter__方法的就是迭代器
# 只要含有__iter__方法的都是可迭代的 —— 可迭代协议
# 可迭代的.__iter__()方法就可以得到一个迭代器
# 迭代器中的__next__()方法可以一个一个的获取值
# from collections import Iterable
# from collections import Iterator
# print(isinstance([], Iterator))
# print(isinstance([].__iter__(), Iterator))
# print(isinstance([], Iterable))
#
#
# print('__iter__' in dir([].__iter__()))
# print('__iter__' in dir(123))           # False, int不可迭代
#
# # 只要含有__iter__方法的都是可迭代的 —— 可迭代协议
# l = [1,2,3,4]
# iterator = l.__iter__()
# print(iterator)
# print(iterator.__next__())
# print(iterator.__next__())


# for其实就在使用迭代器
#
# for i in range(10):                 # 等同于iter = range(10).__iter__()
#     print(i)                        # 循环执行print(iter.__next__())
# ----------------------------------------------------------------------------------------------------------------------------------------------
# #生成器就是一个迭代器,用yield,不能和return公用
# def generator():
#     print(1)
#     yield 'a'
# yield 'b'
# yield 'c'
# # g = generator() # 得到一个生成器作为返回值,实际上是迭代器 # print(g) # print(g.__next__()) # 在每次调用next()的时候执行,遇到yield语句返回,再次执行时从上次返回的yield语句处继续执行。 # def feibo(max): # n, a, b = 0, 0, 1 # while n < max: # yield b # a, b = b, a + b # n += 1 # # l = [x for x in feibo(20)] # print(l)

def generators():
print(12345)
content = yield 'qwert'
print('!!!!!!!!',content)
yield 'ppppp'

g = generators()
g1 = g.__next__()
print(g1)
g1 = g.send('hello')
print(g1)
 

 

posted @ 2018-08-26 22:46  该搬砖啦  阅读(123)  评论(0编辑  收藏  举报