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就不允许这样使用?求解
2 回答
慕桂英4014372
TA贡献1871条经验 获得超13个赞
应枚举递归调用的返回值。举例defeachDecimal(n):q,r=divmod(n,10)ifq!=0:foriineachDecimal(q):yieldiyieldrprint(list(eachDecimal(1234)))顺便说一下,你这里的os.listdir,若换成os.walk则不需要递归。
烙印99
TA贡献1829条经验 获得超13个赞
大哥,递归不是你这样递归的。递归的基本特征就是每次递归调用的函数,都会把这个它的返回值转发给调用他的函数。你可以把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')))这样才是对的
添加回答
举报
0/150
提交
取消