一个偶然的机会,我在网上看到了关于python yield的介绍使用,顿时眼前一亮:这个关键字的使用,对于优化代码效率是一个很有用处的方法。
我在IBM Developer网站看到一位作者简要介绍了一下这个关键字的作用,基本作用和原理讲的循序渐进,很棒,大家可以很容易搜到那篇文章。这里我就简单介绍一下我的认识。yield关键字在pyhon中一般用在函数中,它的语法规则是“yield 返回值”。使用yield关键字的函数不是一个普通的函数,它会“变身”为一个可遍历的(iterable)的对象,其中,遍历的值,正是跟在yield后面的那个返回值。所以,yield的功能就是一个return的功能,不过它在返回参数后不会跳出这个函数体,而是继续执行yield之后的代码。这样的处理流程优势在于:当得到一个我们需要的值后,就可以交付给函数体外部的功能去使用,而不用等待全部处理完了一起return,也不用在内存中开辟出一大片空间来存放我们需要的值的列表。
我看到有人用yield实现排列组合的功能,恩,我今天就用yield实现一个遍历文件夹下所有文件(包括子文件夹)的方法:
import osdef 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 subif name == 'main':
dir = 'D:\parentFile'
for afile in get_all_files(dir):
print afile
小数据量的时候可能看不出来优化效率的效果,估计数据量一大,优势就体现出来啦。估计以后还可以派上其他用场。
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于