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

"""

  

posted @ 2019-06-07 12:49  hlc-123  阅读(110)  评论(0编辑  收藏  举报