yield关键字所在的函数其实不是函数,只是generator生成器,所以会出现下面的情况。
def deepvalues(mapping):
for k,v in mapping.items():
if isinstance(v, dict):
deepvalues(v)
else:
yeild v
若输入{1:{1:2},2:{1:3}}会发现deepvalues只会运行一次,不会如预想的那样递归调用多次
将红色部分换成
for i deepvalues(v):
yield i
可解决