1.列表生成式
In [3]: arr = [i*10 for i in range(10)]
In [4]: arr
Out[4]: [0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
2.生成器
对于arr = [0, 10, 20, 30, 40, 50, 60, 70, 80, 90]这种每个元素都可以根据某种算法推算出来,没有必要占用内存空间。
一遍循环,一遍计算--生成器(generator)
创建generator:
方法一:把[]换成() ,只能用一次,用于迭代
In [12]: arr = (i*10 for i in range(10))In [13]: for i in arr: ...: print(i, end=',')0,10,20,30,40,50,60,70,80,90,In [14]: for i in arr: ...: print(i, end=',')In [15]:
方法二:使用函数作为算法,yield
当调用f.__next__()时,才会执行fib方法,执行到yield时会停下来,并返回结果。下一次调用f.__next__()时,会从上次的yield开始,继续执行,并且保存了运行环境
def fib(max): n, a, b = 0, 0, 1 while max > n: yield b a, b = b, a + b n = n + 1 return 'done'if __name__ == '__main__': f = fib(3) print(f) print(f.__next__()) print(',') print(f.__next__()) print(',') print(f.__next__())