Lec 7 strip || generator

 generator

>>> L = [x*x for x in range(10)]
>>> L
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
>>> g = (x*x for x in range(10))       定义生成器方法一: 直接把列表生成式[]改为()
>>> g
<generator object <genexpr> at 0x1059e2dc8>

>>> next(g)    一个一个打印出来
0
>>> next(g)
1
>>> next(g)
4
>>> next(g)
9
>>> next(g)
16
>>> next(g)
25
>>> next(g)
36
>>> next(g)
49
>>> next(g)
64
>>> next(g)
81
>>> next(g)
Traceback (most recent call last):
  File "<pyshell#38>", line 1, in <module>
    next(g)
StopIteration    没有更多的元素 抛出错误


>>> g = (x*x for x in range(10))
>>> for n in g:            generator是Iterable(可使用for循环直接打印出所有的元素)
    print(n)
    
0
1
4
9
16
25
36
49
64
81

定义生成器方法2:定义中包含yield关键字的函数是generator

执行流程:

函数:顺序执行,遇到return语句或者最后一行函数语句就返回;

变成genarator的函数:每次调用next()的时候执行,遇到yield()时返回,再次执行时从上次返回的yield()语句处继续执行。

例子:定义一个generator,依次产生数字1,3,5 :

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

    
>>> o = odd()  调用generator时,首先需要生成一个generator对象,然后用next()不断获得下一个返回值
>>> next(o)
step 1
1
>>> next(o)
step 2
3
>>> next(o)
step 3
5
>>> next(o)
Traceback (most recent call last):
  File "<pyshell#62>", line 1, in <module>
    next(o)
StopIteration     不再有yield可执行,报错

 

 strip() 去除字符串头尾指定字符(默认为空格):

>>> '     sniperlr      '.strip()
'sniperlr'
>>> s = '***sniperlr***'
>>> s.strip('*')
'sniperlr'

 

posted @ 2016-11-16 11:55  sniperlr  阅读(106)  评论(0)    收藏  举报