为了账号安全,请及时绑定邮箱和手机立即绑定

跪求!Python生成器中使用递归不能按预想进行

跪求!Python生成器中使用递归不能按预想进行

慕容3067478 2019-10-25 21:16:26
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):
yieldi
yieldr
print(list(eachDecimal(1234)))
顺便说一下,你这里的os.listdir,若换成os.walk则不需要递归。
                            
查看完整回答
反对 回复 2019-10-25
?
烙印99

TA贡献1829条经验 获得超13个赞

大哥,递归不是你这样递归的。递归的基本特征就是每次递归调用的函数,都会把这个它的返回值转发给调用他的函数。你可以把yield当成一个不退出的return,如果i是文件夹,递归一个getMDfile没毛病,但是这个函数的yield是返回给参数的,而你并没有call函数并赋值
importos
defgetMDFile(folder):
foriinos.listdir(folder):
i=os.path.join(folder,i)
ifos.path.isdir(i):
yieldlist(getMDFile(i))
else:
yieldi
print(list(getMDFile('somedirectory')))
这样才是对的
                            
查看完整回答
反对 回复 2019-10-25
  • 2 回答
  • 0 关注
  • 342 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信