列表生成式
列表生成式可以快速创建list。
>>> [x * x for x in range(1, 11) if x % 2 == 0] [4, 16, 36, 64, 100]
迭代对象
常用的迭代对象有str、list、dict等,可以通过dir函数来查看对象的所有方法,可迭代对象有__iter__方法,有__iter__方法的对象都可以进行for循环。
迭代器
可以被__next__()函数调用并不断返回下一个值的对象称为迭代器,对象的__iter__()方法就可以获取到对象的迭代器,使用__next__()方法获取对象迭代过程中的下一个元素。
使用while循环+迭代器来模拟for循环:
lst = [1,2,3] lst_iter = lst.__iter__() while 1: try: i = lst_iter.__next__() print(i) except StopIteration: break
生成器
python中可以一边循环一边计算的机制称为生成器:generator,生成器也是可迭代对象。
创建生成器方法一:
>>> g = (x * x for x in range(10)) >>> g <generator object <genexpr> at 0x1022ef630>
创建方式二:
函数中包含yield关键字,此时这个函数就是生成器函数。
def fib(max): n, a, b = 0, 0, 1 while n < max: yield b a, b = b, a + b n = n + 1 return 'done'
generator和普通函数的执行流程不一样,普通函数顺序执行,遇到return或者函数最后一行就返回,而generator函数每次调用next()执行,遇到yield语句返回,当再次执行时从上次返回的yield语句出继续执行。
def odd(): print('step 1') yield 1 print('step 2') yield(3) print('step 3') yield(5) >>> o = odd() >>> next(o) step 1 1 >>> next(o) step 2 3 >>> next(o) step 3 5 >>> next(o) Traceback (most recent call last): File "<stdin>", line 1, in <module> StopIteration