并发编程和并行编程有什么区别?我问谷歌,但没有找到任何帮助我理解这种差异的东西.你能给我一个例子吗?
现在我发现了这个解释:http://www.linux-mag.com/id/7411 - 但"并发性是程序的属性"vs"并行执行是机器的属性"对我来说还不够 - 我还不能说什么是什么.
有人能举例说明为什么与Python生成器函数相关的"发送"功能存在吗?我完全理解屈服函数.但是,发送功能让我很困惑.有关此方法的文档很复杂:
generator.send(value)
Run Code Online (Sandbox Code Playgroud)
恢复执行并将值"发送"到生成器函数中.value参数成为当前yield表达式的结果.send()方法返回生成器产生的下一个值,如果生成器退出而不产生另一个值,则引发StopIteration.
那是什么意思?我认为价值是功能的输入?短语"send()方法返回生成器产生的下一个值"似乎也是yield函数的确切目的; yield返回生成器产生的下一个值...
有人能给我一个利用发送器生成器的例子吗?
这是我写的一个小函数来理解send方法:
>>> def test():
... for x in xrange(10):
... res = yield
... yield res
>>> a = test()
>>> next(a)
>>> next(a)
>>> next(a)
>>> next(a)
>>> a.send(0)
Traceback (most recent call last):
<ipython-input-220-4abef3782000> in <module>()
StopIteration
>>> a = test()
>>> a.send(0)
Traceback (most recent call last):
<ipython-input-222-4abef3782000> in <module>()
TypeError: can't send non-None value to a just-started generator
>>> a.send(None)
>>> a.send(0)
0
>>> a.send(0)
>>> a.send(0)
0
>>> a.send(0)
>>> a.send(0)
0
>>> a.send(0)
Run Code Online (Sandbox Code Playgroud)
为什么第一次出现错误? …
我正在阅读 Python Essential Reference,但我无法理解接收和发出返回值的协程。
这就是作者所说的 - “如果在 yield 表达式中提供了值,协程可以使用 yield 同时接收和发出返回值。”
下面是一个示例,说明了这一点:
def line_splitter(delimiter=None):
print("Ready to split")
result = None
while True:
line = (yield result)
result = line.split(delimiter)
Run Code Online (Sandbox Code Playgroud)
作者进一步补充说,在这种情况下,我们以与以前相同的方式使用协程。但是,现在对 send() 的调用也会产生结果。例如:
>>> s = line_splitter(",")
>>> s.next()
Ready to split
>>> s.send("A,B,C")
['A', 'B', 'C' ]
>>> s.send("100,200,300")
['100', '200', '300']
Run Code Online (Sandbox Code Playgroud)
我想知道上面的代码是如何工作的。
谢谢你的帮助。