zoukankan      html  css  js  c++  java
  • 生成器

    1.生成器

      1.生成器的本质就是迭代器

      2.生成器的特点和迭代器一样,取值方式和迭代器一样(__next__())

      send():给上一个yield传值,不能在开头(没有上一个yield),最后一个yield也不能用send()

      3.生成器一般由生成器函数或者生成器表达式来创建

      4.生成器就是手写的迭代器

    2.生成器函数

      1.和普通函数没有区别,里面有yield的函数就是生成器函数

      2.生成器函数在执行的时候,默认不会执行函数体,返回生成器

      3.通过生成器的__next__()分段执行这个函数

      4.send()给上一个yield传值,不能在开头(没有上一个yield),最后一个yield也不能用send()

    1 def func():
    2     print("abc")
    3     yield 1
    4     print("def")
    5 gen = func()

    return 和yield都可以返回数据,gen=func()不会执行函数,拿到的是生成器,执行生成器需要用__next__()

    函数中如果有yield,这个函数就是生成器函数,生成器函数获取的是生成器

    yield:相当于return,可以返回数据,但是yield不会彻底中断函数,而是分段执行函数

    print(gen.__next__())  执行函数,执行到下一个yield

    print(gen.__next__())  继续执行函数到下一个yield

    1 def func():
    2     yield 1
    3     yield 2
    4     yield 3
    5     yield 4
    6 for i in func():#for的内部一定有__next__()
    7     print(i)
    8 print(list(func()))#内部有__next__()

    3.推导式

      1.列表推导式:[结果 for 循环 条件筛选]

        例如:将100以内的偶数输出到一个列表中

        

    1 lst = [i for i in range(100) if i % 2 == 0]
    2 print(lst)

        

      2.字典推导式:{k:v for循环 条件筛选}

      例如:lst = [11,22,33,44] 输出{0:11,1:22,2:33,3:44}

      

    1 lst = [11,22,33,44]
    2 dic = {i:lst[i] for i in range(len(lst))}
    3 print(dic)

      3.集合推导式:{k for循环 条件}

    1 lst = [1,1,2,2,3,3,4,4]
    2 s = {el for el in lst}
    3 print(s)

    结果为:{1,2,3,4}

    4.生成器表达式

    生成器表达式使用(),由于元组不能增删改,所以没有元组推导式

      (结果 for循环 条件)

    1 tu = (i for i in range(1,10))
    2 print(tu)
    执行出来的是一个生成器

    如果要取值,使用__next__()

    1 def func():
    2     print(111)
    3     yield 222
    4     yield 333
    5 g = func()#生成器
    6 g1 = (i for i in g)#生成器
    7 
    8 g2 = func()#生成器
    9 g3 = (i for i in g2)#生成器
    10 print(list(g1)) #结果为111 222 333从源头把数据拿走
    11 print(list(g3)) #如果没有第8行,执行结果为[],因为源头已经没有数据

    生成器表达式的特点:

      1.惰性机制

      2.只能向前

      3.节省内存

  • 相关阅读:
    UVa532 Dungeon Master 三维迷宫
    6.4.2 走迷宫
    UVA 439 Knight Moves
    UVa784 Maze Exploration
    UVa657 The die is cast
    UVa572 Oil Deposits DFS求连通块
    UVa10562 Undraw the Trees
    UVa839 Not so Mobile
    327
    UVa699 The Falling Leaves
  • 原文地址:https://www.cnblogs.com/s593941/p/9469992.html
Copyright © 2011-2022 走看看