生成器

生成器就是一种变循环边计算的一种函数,或者说是机制,也可以说是一种函数语法定义的一种迭代器

,当计算到某一个值的时候,会将当时的状态暂存下来,第二次迭代,会根据当时的状态去计算

,所以生成器并不像列表将所有的值放到内存中


看下面的例子:

将目录下面的所有文件打印出来,一般递归方法

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
    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值