• 014生成器(重点)


    ##补充:列表生成器  

    1 #两个理解例子
    2 a=[x**2   for  x  in  range(10)]            #取x,然后执行x**2,在存放到列表里面
    3 print(a)          #[0,1,4,9,16,25,36,49,64,81]
    4 
    5 def  f(n):
    6     return   n**2
    7 a=[f(x)   for  x   in  range(10)]    #取x,然后执行x**2,在存放到列表里面
    View Code

    ##生成器

    1 s=(x**2  for  x  in  range(2,10))  #s就是一个生成器对象,生成器里面没有数据,只有调用才会有数据产生
    2 print(s)   #<generatorobject<genexpr>at0x0000025383953F10>
    3 print(s.__next__())   #不用这个
    4 print(next(s))   #用这个
    5 for  i  in  s:
    6 
    7 print(i)
    View Code

    上面是第一种创建方式
    第二种使用yield创建

     1 def  f():
     2     print('ook')
     3     yield   1
     4     print('koo')
     5     yield   2
     6 g=f()
     7 print(g)     #  <generatorobjectfat0x000001F2049F3F10>没有显示ok,没有执行print。
     8 print(next(g))  #  调用next才会执行print
     9 
    10 print(next(g))
    View Code

    补充:可迭代对象,内部有iter方法
    生成器使用

    1 def  fib(max):
    2     n, before, after = 0, 0, 1
    3 while  n  <  max:
    4     before, after = after, before+after
    5     n += 1
    6     yield  after
    7 generator = fib(25)
    8 for i  in  generator:
    9     print(i,end='  ')
    View Code
     1 def   fib(max):
     2     n, before, after = 0, 0, 1
     3     while  n < max:
     4     before, after = after, before + after
     5     n += 1
     6     count = yield  after
     7     print(count)
     8 generator = fib(25)
     9 print(generator.send(None))#next(b),第一次send前如果没有next,只能传None
    10 print(generator.send('aiq'))
    View Code

    ##通过yield伪并发,非重点,看明白就行(没有找到例子)视频。博客主要是我整理知识所用,所以我理解了,就没有再去找例子了

  • 相关阅读:
    2.1.4 现代计算机的设计原则(译)
    2.1.2 指令执行(译)
    计算机体系结构之一体系结构【译】
    2.2.1 比特【译】
    2.1.6 处理器级并行【译】
    jQery Datatables回调函数中文
    彪悍的人生不需要解释
    程序员读书雷达
    打开页面自动打开QQ的javascript代码
    EF大数据插入
  • 原文地址:https://www.cnblogs.com/-nbloser/p/8120673.html
Copyright © 2020-2023  润新知