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'
浙公网安备 33010602011771号