• Python小白的学习笔记


    计算机系学渣开始学习Python了,谨以此文记录自己水Python基础的过程

    学习资料:廖雪峰的官方网站 https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000

    2018.04.09

    #generator生成器#

    平时生成一些“列表性”的东西,我们常用list生成式,但是要是有一个包含100万个元素的列表,我们还能直接使用list吗?这样做占用了很大的存储空间,,那么要怎么做呢?如果列表元素可以按照某种算法表示出来,那么我们就可以在循环的过程中不断推算出后续的元素,而不必创建完整的list,从而节省大量空间。而在Python中,这种一边循环一边计算的机制,称为生成器:generator。

    1、list与generator对比

    list方法
    >>> L = [x*x for x in range(10)]
    >>> L
    [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
    generator生成方法一
    >>> g = (x * x for x in range(10))
    >>> g
    <generator object <genexpr> at 0x000001C82CD1AFC0>

    可以看出,list与generator的区别仅在于[ ]与()的使用。而generator生成的

    <generator object <genexpr> at 0x000001C82CD1AFC0>

    则是其为在【1,10】内的x*x生成的一个算法,此算法只能计算从1到10内的x^2的结果。

    2、generator输出

    generator是使用next()函数获得generator的下一个返回值:

    如:

    >>> next(g)
    0
    >>> next(g)
    1
    >>> next(g)
    4

    可是这样一直输入next()才能查看函数值???.....好吧,其实可以使用for循环的啦,就像这样

    >>> for n in g:
        print(n)
    
        
    9
    16
    25
    36
    49
    64
    81

    3、应用....fib数列

    list方法
    >>> def fib(max): n,a,b =0, 0,1 while n<max: print(b) a,b=b,a+b n = n +1 return 'done' >>> fib(6) 1 1 2 3 5 8 'done'

    在尝试的过程中,发现Python对于格式还是比较注意,比如,,一个不注意输入了下面这样的代码,就gg了....

    def fib(max):
        n,a,b = 0,0,1
        while n<max:
            print(b)
            a,b = b,a+b
            n = n+1
            return 'done'
    
        
    >>> fib(6)
    1
    'done

    return要与while对齐!对齐! 对齐!

    generator生成方法二
    1
    >>> def fib(max): 2 n,a,b = 0,0,1 3 while n< max: 4 yield b 5 a,b = b,a+b # t = (b,a+b),t是一个tuple 6 n =n+1 7 return 'done' 8 9 >>> f= fib(6) 10 >>> f 11 <generator object fib at 0x000001C82CD1AF68>

    将list中的print()方法改成yeild方法就可以将fib函数编变成generator了。

    注意,将fib(6)改成fib(20)时,生成的generator算法也不同了<地址>

    1 >>> f=fib(20)
    2 >>> f
    3 <generator object fib at 0x000001C82CD2C0A0>

    之后依旧可以使用for循环打印出fib数列

    4、小白对yeild的一点理解

    yeild相当于一个中断函数,每次程序运行到yeild处时就会产生中断,再执行时,则从此中断处开始执行。

    >>> def odd():
        print('step 1')
        yield (1)
        print('step 2')
        yield(3)
        print('step 3')
        yield(5)
    
        
    >>> o = odd()
    >>> next(o)
    step 1
    1

    5、因为刚开始学习python,可能有些地方的理解并不是很到位,若有理解偏差,还希望各位指点一二

    参考:https://blog.csdn.net/u012422446/article/details/56555885

  • 相关阅读:
    Mac Outlook邮箱MicrosoftExchange邮箱快满了,请减小邮箱大小。
    SpringCloud Config Server中{application}等占位符使用场景设置默认拉去分支
    五四日记
    org.apache.ibatis.binding.BindingException: Mapper method 'attempted to return null from a method with a primitive return type (long).
    业务量剧增后服务器常见返回码总结
    Mac下Jmeter快速安装与入门-模拟测试Post请求及设置Http头
    Mac下 Visual VM 无法检测到本地的Java进程
    高并发下hystrix熔断超时及concurrent.RejectedExecutionException: Rejected command because thread-pool queueSize is at rejection threshold问题
    Silly Java-Final 关键字
    qqwry.dat输出乱码问题及maven打包后资源文件大小不一致的问题
  • 原文地址:https://www.cnblogs.com/zx-zhang/p/8767829.html
Copyright © 2020-2023  润新知