zoukankan      html  css  js  c++  java
  • 3 -14 迭代 和列表 生成器

    列表生成式 执行效率高 简洁

    a = []
    for i in range(5):
    a.append(i*2)
    print(a)

    列表形式
    [a * 2 for a in range(5)]    ##列表形式 执行效率低   主要是先完成生成 再展现 占用内存

    
    
    ##同样 可以传入函数  还执行

    def aa(name):
        print('ni hao %s'%name )
    print [a * 2 for a in range(5)]
    [aa(i) for i in range(5)]        

    生成器 :当你调用的时候还会给出结果 从而大大提高了调度性能 

    b = (a * 2 for a in range(50000))
    print(b)

    <generator object <genexpr> at 0x000000000256D3A8>   ### 返回的只是一个内存地址 

    方法  b.next ()

    python   3.x 是  b.__next__()   只能调取下一个  没有别的 方法再调取 上一个 


    >>> a
    [1, 2, 3, 4, 5, 6, 7, 8]
    >>> c = iter(a)
    >>> 
    >>> c
    <listiterator object at 0x0000000002E26C18>    
    
    ###iter(a)   将列表a 变成一个生成器

    斐波那契

    def  aa(num):
        n,a,b = 0,0,1
        while n < 10:
            print(b)
            a,b = b,a+b
            n+=1
    
    aa(10)

    列表生成

    def  aa(num):
        n,a,b = 0,0,1
        while n < 10:
            yield (b)    ###当启用yield的时候生成的结果是一个内存地址 变成了生成器
            a,b = b,a+b
            n+=1
    
    aa(10)    ###返回值就变成了一个生成器
    ###结果    <generator object aa at 0x00000000025AD3A8>
    cc = aa(10)
    print(cc.next())
    print('-----------')   ### 目前达到了随意进出一个程序 来执行想要的操作
    print(cc.next())
    print('============')

     通过yeild 实现单线 并多线程任务   send语法运用

    def aa(name):
        print('%s 过来玩'%name)
        while True:
            shop = yield
            print('%s 买了一个%s'%(name,shop))
    ###此时 已经不是一个函数了 变成了一个生成器
    # c = aa('lining')
    # c.next()
    # list = ['bao','jiucai','taozi']
    # c.send(list)
    def bb(name):
        c = aa('a')    
        c1 =aa('b')
        c.next()     ##位置关键点
        c1.next()    ##位置关键点  
        print('开始生产包子啦')
        for i in range(10):
            print('2个包子。。。。。')
            c.send(i)
            c1.send(i)
    bb('th') ## 运行
  • 相关阅读:
    MyString
    Django疑难问题
    mysql 疑难问题-django
    python时间转换 ticks-FYI
    django建议入门-FYI
    Python风格规范-FYI
    scrum敏捷开发☞
    git基本命令
    centos下的安装mysql,jdk
    memcached for .net on windows
  • 原文地址:https://www.cnblogs.com/th-lyc/p/8572728.html
Copyright © 2011-2022 走看看