python关键字yield_python中yield关键字的使用

一个偶然的机会,我在网上看到了关于python yield的介绍使用,顿时眼前一亮:这个关键字的使用,对于优化代码效率是一个很有用处的方法。

我在IBM Developer网站看到一位作者简要介绍了一下这个关键字的作用,基本作用和原理讲的循序渐进,很棒,大家可以很容易搜到那篇文章。这里我就简单介绍一下我的认识。yield关键字在pyhon中一般用在函数中,它的语法规则是“yield 返回值”。使用yield关键字的函数不是一个普通的函数,它会“变身”为一个可遍历的(iterable)的对象,其中,遍历的值,正是跟在yield后面的那个返回值。所以,yield的功能就是一个return的功能,不过它在返回参数后不会跳出这个函数体,而是继续执行yield之后的代码。这样的处理流程优势在于:当得到一个我们需要的值后,就可以交付给函数体外部的功能去使用,而不用等待全部处理完了一起return,也不用在内存中开辟出一大片空间来存放我们需要的值的列表。

我看到有人用yield实现排列组合的功能,恩,我今天就用yield实现一个遍历文件夹下所有文件(包括子文件夹)的方法:

import os

def get_all_files(file_dir):

if not os.path.isdir(file_dir):

yield file_dir

else:

subfiles = os.listdir(file_dir)

for afile in subfiles:

path = os.path.join(file_dir, afile)

for sub in get_all_files(path):

yield sub

if name == 'main':

dir = 'D:\parentFile'

for afile in get_all_files(dir):

print afile

小数据量的时候可能看不出来优化效率的效果,估计数据量一大,优势就体现出来啦。估计以后还可以派上其他用场。

你可能感兴趣的:(python关键字yield)