生成器就是一种变循环边计算的一种函数,或者说是机制,也可以说是一种函数语法定义的一种迭代器
,当计算到某一个值的时候,会将当时的状态暂存下来,第二次迭代,会根据当时的状态去计算
,所以生成器并不像列表将所有的值放到内存中
看下面的例子:
将目录下面的所有文件打印出来,一般递归方法
def list_file(curpath,files): if os.path.isfile(curpath): files.append(curpath) else: dirs=os.listdir(curpath) for i in dirs: list_file(os.path.join(curpath,i),files)
利用python 列表可变的特性,保存结果
使用生成器
def list_file2(curpath): if os.path.isfile(curpath): yield curpath else: dirs = os.listdir(curpath) for i in dirs: for element in list_file2(os.path.join(curpath, i)): yield element在这里还是有点奇怪的,for element in list_file2(os.path.join(curpath, i)),list_file2(os.path.join(curpath, i))本身返回迭代器,并将结果yield 了,后面迭代之后重新yield了一回
if __name__=="__main__": import os dir="E:\python\data"x=[]
list_file(dir,x)
for i in list_file2(dir):
print i