python迭代器和生成器

迭代器:

迭代器是一种数据流,可以进行迭代(循环),每次返回一个数据

生成器:

生成迭代器的函数就是生成器

比如:

def my_range(x):
    i = 0
    while i < x:
        yield i
        i += 1

my_iterator = my_range(5)

for x in my_iterator:
    print(x)

0
1
2
3
4

上面这段代码里的 my_range 就是生成器,  my_iterator 就是生成的迭代器, 可以循环迭代器.

生成器使用关键字  yield  ,  yield 的值就是迭代器的数据流,每次调用时都用停下的位置继续,直到生成器函数退出,数据流生成完毕.

一些栗子:

# 将lessons列表转换为一个数据流,数据流的每一项是一个tuple,tuple的第一个值是数字,当前是第几课,第二个值是lessons里对应的值,就是课名.

lessons = ["Why Python Programming", "Data Types and Operators", "Control Flow", "Functions", "Scripting"] def my_enumerate(iterable, start=0): # iterable是一个list index = 0 # 循环iterable对象 while index < len(iterable): # start的第几课,index是列表的索引 yield (start, iterable[index]) index += 1 start += 1 for i, lesson in my_enumerate(lessons, 1): print("Lesson {}: {}".format(i, lesson))
Lesson 1: Why Python Programming
Lesson 2: Data Types and Operators
Lesson 3: Control Flow
Lesson 4: Functions
Lesson 5: Scripting

 

# 将iterable对象拆成若干个列表的数据流,每个列表的长度为指定的size

def
chunker(iterable, size): # 循环的间隔是size for i in range(0, len(iterable), size): yield iterable[i:i + size] for chunk in chunker(range(25), 4): print(list(chunk))
[0, 1, 2, 3]
[4, 5, 6, 7]
[8, 9, 10, 11]
[12, 13, 14, 15]
[16, 17, 18, 19]
[20, 21, 22, 23]
[24]

range 方法的第三个参数表示循环的间隔,如果不设置,默认是1,就是从开始到结束,0,1,2,3,4...那样循环.如果设置为3,就是一次间隔为3, 就是0,3,6,9...那样循环

 

posted @ 2018-06-06 00:12  诗&远方  阅读(432)  评论(0编辑  收藏  举报