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

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

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

凤凰求蛊 2019-11-03 15:52:44
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 回答

?
慕尼黑5688855

TA贡献1848条经验 获得超2个赞

应枚举递归调用的返回值。
举例
defeachDecimal(n):
q,r=divmod(n,10)
ifq!=0:
foriineachDecimal(q):
yieldi
yieldr
print(list(eachDecimal(1234)))
顺便说一下,你这里的os.listdir,若换成os.walk则不需要递归。
                            
查看完整回答
反对 回复 2019-11-03
?
牛魔王的故事

TA贡献1830条经验 获得超3个赞

大哥,递归不是你这样递归的。递归的基本特征就是每次递归调用的函数,都会把这个它的返回值转发给调用他的函数。你可以把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-11-03
  • 2 回答
  • 0 关注
  • 246 浏览
慕课专栏
更多

添加回答

举报

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