相关疑难解决方法(0)

"yield"关键字有什么作用?

yieldPython中关键字的用途是什么?它有什么作用?

例如,我试图理解这段代码1:

def _get_child_candidates(self, distance, min_dist, max_dist):
    if self._leftchild and distance - max_dist < self._median:
        yield self._leftchild
    if self._rightchild and distance + max_dist >= self._median:
        yield self._rightchild  
Run Code Online (Sandbox Code Playgroud)

这是来电者:

result, candidates = [], [self]
while candidates:
    node = candidates.pop()
    distance = node._get_dist(obj)
    if distance <= max_dist and distance >= min_dist:
        result.extend(node._values)
    candidates.extend(node._get_child_candidates(distance, min_dist, max_dist))
return result
Run Code Online (Sandbox Code Playgroud)

_get_child_candidates调用该方法时会发生什么?列表是否返回?单个元素?它又被召唤了吗?后续通话何时停止?


1.代码来自Jochen Schulz(jrschulz),他为度量空间创建了一个很棒的Python库.这是完整源代码的链接:模块mspace.

python iterator yield generator coroutine

9664
推荐指数
46
解决办法
212万
查看次数


python:lambda,yield-statement/expression和loops(Clarify)

TLDR: 我们可以yield在一个lambda?中实现或生成语句(带循环)?

我的问题是澄清:

是否可以使用yield实现以下简单循环函数

def loopyield():
   for x in range(0,15):
      yield x
print(*loopyield())
Run Code Online (Sandbox Code Playgroud)

结果有误:

lamyield=lambda x: yield x for x in range(0,15)
                       ^
SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud)

看起来像是,它期待一些东西作为不成文的返回语句的正确操作数,但发现yeild并且变得困惑.

是否有合适的合法方式在循环中实现这一目标?

旁注:yield可以是语句/表达式取决于你问的对象:yield - statement还是expression?

最终答案: yield可以与lambda一起使用,但限制(单行)使它无用. for/while在lambda中不可能,因为它们不是表达式. -user2357112隐式for循环可以使用列表推导,并且yield在列表推导中有效.- wim

判决 -显式循环不可能,因为python中的lambdas只能包含表达式,并且要编写显式循环,您需要使用语句.-wim

python lambda loops generator python-3.x

21
推荐指数
3
解决办法
1万
查看次数