TOP

python-day12

一. 迭代器

  迭代器

    __iter__()获取迭代器

    __next__()下一个

 

二. 生成器

  本身就是迭代器

  两种方法写生成器

    1. 生成器函数

    2. 生成器表达式

 1 #生成器函数,就是把return换成yield
 2 # def generator():
 3 #     print('爽歪歪')
 4 #     yield '娃哈哈'#可以让我们的函数分段运行
 5 #     print('酸酸乳')
 6 #     yield 'AD钙奶'
 7 #     print('黄焖鸡米饭')
 8 #     yield
 9 #
10 # ret = generator()#不会执行你的函数,获取到生成器对象
11 # print(generator())
12 # print(ret)
13 # print(ret.__next__())
14 # print(ret.__next__())#必须执行__next__()才能触发生成器
15 # print(ret.__next__()) #StopIteration 会打印黄焖鸡米饭 找不到yield会报错
View Code
# 生成器表达式
# dic = [1,2,3,4,5,6,7,8,9,0]
# s = (i for i in dic)
# print(s)

三. 生成器函数

  函数内部有yield,yield返回 >>>>return

  yield可以把函数分段执行

  生成器函数被调用的时候. 返回生成器

  def func():

    yield

  g = func() - 得到生成器

 

  生成器的用法和迭代器基本一致

  __next__() 开始执行生成器. 执行到yield. 直到没有yield,抛出StopIteration

  send() 可以给上一个yield传值

  1. 省内存

  2. 惰性机制, 不访问__next__() 就没有值

  3. 只能向前. 不能反复

四. 各种推导式

  列表推导式 [ 结果 for循环 if判断 ]

  字典推导式 {key: value for循环 if判断 }

  集合推导式 { key for循环 if判断 }

 1 # 列表推导式
 2 # lst = [ 'python全栈%s期'%i for i in range(1,18) if i%2==1]
 3 # print(lst)
 4 # 语法:[结果 for循环 if判断]
 5 
 6 # 字典推导式
 7 # ls = [11,22,33]
 8 # di = {i:ls[i] for i in range(len(ls))}
 9 # print(di)
10 
11 # 集合推导式
12 # print({i for i in range(10)})
13 
14 # 生成器表达式
15 # dic = [1,2,3,4,5,6,7,8,9,0]
16 # s = (i for i in dic)
17 # print(s)
View Code

五. 生成器表达式

  (结果 for循环 if 判断)

  惰性机制, 不访问__next__() 就没有值

  只能向前. 不能反复

yield from 

1 # def func():
2 #     dic = [1,2,3,4]
3     ## yield from dic
4     # yield dic[0]
5     # yield dic[1]
6     # yield dic[2]
7     # yield dic[3]
8 # a= func()
View Code

 

posted on 2018-11-01 17:26  hui_T  阅读(149)  评论(0编辑  收藏  举报