yield
Python中关键字的用途是什么?它有什么作用?
例如,我试图理解这段代码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.
线和光纤有什么区别?我听说过来自红宝石的纤维,我读过听过它们有其他语言版本,有人可以用简单的语言向我解释一下螺纹和纤维之间有什么区别.
"coroutine"和"thread"之间有什么区别?
协程与延续和发电机有什么区别?
我是gevents和greenlets的新手.我找到了一些关于如何使用它们的好文档,但是没有一个能让我证明我应该如何以及何时使用greenlets!
我不确定的是,如果它们基本上是共同惯例,它们如何为我们提供并发性.
我理解协程的原理.我知道如何让标准StartCoroutine
/ yield return
模式在Unity中的C#中工作,例如调用一个方法返回IEnumerator
via StartCoroutine
并在该方法中执行某些操作yield return new WaitForSeconds(1);
,等待一秒,然后执行其他操作.
我的问题是:幕后真的发生了什么?什么是StartCoroutine
真的?什么IEnumerator
是WaitForSeconds
恢复?如何StartCoroutine
将控制权返回到被调用方法的"其他"部分?所有这些如何与Unity的并发模型相互作用(在不使用协同程序的情况下,许多事情同时发生)?
在kotlinx.coroutines
库中,您可以使用launch
(with join
)或async
(with await
)启动新的协同程序.他们之间有什么区别?
我有一些示例Python代码,我需要在C++中模仿它.我不需要任何特定的解决方案(例如基于协同例程的产量解决方案,尽管它们也是可接受的答案),我只需要以某种方式重现语义.
这是一个基本的序列生成器,显然太大而无法存储物化版本.
def pair_sequence():
for i in range(2**32):
for j in range(2**32):
yield (i, j)
Run Code Online (Sandbox Code Playgroud)
目标是维护上面序列的两个实例,并以半锁步方式迭代它们,但是以块为单位.在下面的示例中,first_pass
使用对序列来初始化缓冲区,并second_pass
重新生成相同的精确序列并再次处理缓冲区.
def run():
seq1 = pair_sequence()
seq2 = pair_sequence()
buffer = [0] * 1000
first_pass(seq1, buffer)
second_pass(seq2, buffer)
... repeat ...
Run Code Online (Sandbox Code Playgroud)
我在C++中找到解决方案的唯一方法就是模仿yield
C++协同程序,但我没有找到关于如何做到这一点的任何好的参考.我也对这个问题的替代(非一般)解决方案感兴趣.我没有足够的内存预算来保存传递之间序列的副本.
什么是c ++ 20中的协同程序?
它与"Parallelism2"或/和"Concurrency2"的不同之处(见下图)?
以下图片来自ISOCPP.
coroutine ×10
generator ×3
python ×3
c++ ×2
yield ×2
architecture ×1
asynchronous ×1
c# ×1
c++20 ×1
concurrency ×1
fiber ×1
gevent ×1
greenlets ×1
iterator ×1
kotlin ×1
system ×1
terminology ×1