急求!!!!Python生成器中使用递归不能按预想进行感激不尽

defgetMDFile(folder):
foriinos.listdir(folder):
i=os.path.join(folder,i)
ifos.path.isdir(i):
getMDFlie(i)
elifos.path.splitext(i)[-1]==".md":
yieldi
#print(i)
使用print(),正常打印所有子孙目录下的md文件,而换作yield则仅返回了根目录下的md文件.
为什么呢?是我使用错了,还是python就不允许这样使用?求解
凤凰求蛊
浏览 250回答 2
2回答

慕尼黑5688855

应枚举递归调用的返回值。举例defeachDecimal(n):q,r=divmod(n,10)ifq!=0:foriineachDecimal(q):yieldiyieldrprint(list(eachDecimal(1234)))顺便说一下,你这里的os.listdir,若换成os.walk则不需要递归。

牛魔王的故事

大哥,递归不是你这样递归的。递归的基本特征就是每次递归调用的函数,都会把这个它的返回值转发给调用他的函数。你可以把yield当成一个不退出的return,如果i是文件夹,递归一个getMDfile没毛病,但是这个函数的yield是返回给参数的,而你并没有call函数并赋值importosdefgetMDFile(folder):foriinos.listdir(folder):i=os.path.join(folder,i)ifos.path.isdir(i):yieldlist(getMDFile(i))else:yieldiprint(list(getMDFile('somedirectory')))这样才是对的
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript