码迷,mamicode.com
首页 > 其他好文 > 详细

迭代器和生成器

时间:2018-08-26 23:48:03      阅读:342      评论:0      收藏:0      [点我收藏+]

标签:遇到   iterable   获取值   lse   turn   +=   span   cti   获取   

# 迭代器的概念(优点:可遍历容器里的元素,省内存空间,随着循环生成)
# 迭代器协议 —— 内部含有__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)

 

迭代器和生成器

标签:遇到   iterable   获取值   lse   turn   +=   span   cti   获取   

原文地址:https://www.cnblogs.com/hhsh/p/9539357.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!