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

原文地址:https://www.cnblogs.com/zx-zhang/p/8767829.html