10万人不会这几个Python问题,搞懂超过90%的学习者10个问题,看看你会几个?yield关键词是做什么的?问题详细内容?最高赞回答 (15000多赞)IterablesGeneratorsYie( 二 )
然后是关键的地方:
当for循环第一次调用generator的时候 , 它会从头开始执行 , 直到yield关键词 , 返回第一个值 , 也就是0 。
然后记住执行到哪一行代码 , 也就是yield的位置 。
下次for循环再次调用它 , 它从yield的下一行继续执行 , 直到再次碰到yield , 返回下一个值 , 也就是1.
这个过程一直重复 , 直到generator中没有内容了 。 例子中就是range里的数字被用完 。
现在再看看最开始的问题:这是一个对树的遍历算法 , 查找树上符合条件的节点 。 代码中加了详细的中文注释 。
Generator:
#这个函数会返回一个生成器(Generator) , 这是一个二叉树的node对象中的方法
def_get_child_candidates(self,distance,min_dist,max_dist):
#如果还有左孩子 , 并且距离符合条件 , 返回左孩子 , 然后暂停在这里
ifself._leftchildanddistance-max_dist<self._median:
yieldself._leftchild
#如果还有右孩子 , 并且距离符合条件 , 返回右孩子 , 然后暂停在这里
ifself._rightchildanddistance+max_dist>=self._median:
yieldself._rightchild
#如果执行到了这里 , 说明没有符合条件的左右孩子了 , 生成器空了 , 就迭代结束了 。
Caller:
#创建一个空的列表 , 和当前对象节点
result,candidates=list(),[self]
#循环 , 开始里面只有自己
whilecandidates:
#弹出最后一个节点
node=candidates.pop()
#获得obj对象和目标节点的距离
distance=node._get_dist(obj)
#如果距离ok , 写入到结果列表中
ifdistance<=max_distanddistance>=min_dist:
result.extend(node._values)
#把自己的子节点加入到candidates中 , 这样循环会继续 , 直到树上的所有节点都被遍历
candidates.extend(node._get_child_candidates(distance,min_dist,max_dist))
returnresult
点赞是美德快速翻看这篇文章很容易 , 但只有实在掌握了这些问题才能对你有帮助!
如果大家喜欢这个系列 , 本文阅读上千 , 我会更新解答后面的问题 。 否则大家可以点击阅读原文去查看英文的问题列表和解答 。
如果喜欢 , 请点赞 , 点再看 。 能转发就更好啦 。 谢谢!
- 以太币会不会像比特币越挖越少 来了解清晰!
- 牛市旗手”归来?券商股大爆发,又见券商回购,这波行情能走多远?
- 一诺|一诺巅峰赛上分如喝水,2400分补位不开麦,这就是天才选手
- 谁说碎花裙是少女专属?春季掌握这些搭配思路,轻松解锁轻熟美
- 美国“芯荒”
- 20万的SUV中好车不少,这几台经济省油,还是销量王
- 一加|一加高管提前火力全开,这是为新机预热吗?
- 这类新职业火了!超四成从业者年薪超10万元
- 香椿|西安香椿一斤最贵卖到45元 这两天价格回落
- 卖爆了!这种车火了!连续11个月,销量刷新纪录!啥情况?
