33、python基础学习-生成器&列表生成器&迭代器
#!/usr/bin/env python
#__author: hlc
#date: 2019/6/7
# 列表生成式
# def f(n):
# return n**3
# a = [f(x) for x in range(10)] #前面的参数必须和后面一样
# print(a) # [0, 1, 8, 27, 64, 125, 216, 343, 512, 729]
# 生成器
# a = (x for x in range(10))
# print(a)
# for i in a : # 等于print(next(a))的遍历
# print(i)
"""
生成器函数和普通的函数有一点不一样,就是把return换成yeild,其中yeild是一个语法糖,内部实现迭代器协议,同时保持状态可以挂起
"""
# def foo() :
# print("ok")
# yield 1 # yield 起到断层的作用,
# print("ok2")
# yield 2
# for i in foo() :
# print(i)
# for 循环后面跟的是可迭代对象,只要具有__iter__()方法的都是可迭代对象
# def fib(max) :
# n,before,after = 0,0,1
# while n < max :
# print(after)
# before,after = after,after+before
# n = n+1
# fib(8)
# 生成器于函数的区别:函数会把所有的内容加载到内存中,生成器只会在需要的时候取出想要的值
"""
生成器都是一个迭代器;
迭代器满足两个条件:
1、有iter方法;
2、有next方法;
for 循环内部三件事:
1、调用可迭代对象iter方法返回一个迭代器对象
2、不断调用迭代器对象的next方法
3、处理stopIteration
"""