玩弄树木,我偶然发现了这种行为:
def descendants (self):
return #or "pass" or "42"
Run Code Online (Sandbox Code Playgroud)
明显回归None.
另一方面:
def descendants (self):
return
yield 42
Run Code Online (Sandbox Code Playgroud)
返回一个不产生任何东西的生成器(实际上是叶节点所需的行为).
有人可以向我解释一下这里发生了什么吗?
不应该yield 42是无法访问的代码吗?(我猜测函数是生成器还是"普通"函数的决定是在编译时根据它是否包含一个或多个yield语句来做出的,无论它们是否可达.但这只是一个黑暗的镜头.)
上下文如下:我有树,每个节点都是树或叶子.现在我想生成一个节点的所有后代:
class Leaf (Node):
@property
def descendants (self):
return
yield 42
class Tree (Node):
@property
def descendants (self):
for child in self.children:
yield child
yield from child.descendants
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
504 次 |
| 最近记录: |