这个python语法是什么意思?

Gop*_*opi 6 python yield generator

我不是一个python的家伙,我想了解一些python代码.我想知道下面代码的最后几行是做什么的?这种多个对象是否被返回?还是返回了3个对象的列表?

req = SomeRequestBean()
req.setXXX(xxx)
req.YYY = int(yyy)

device,resp,fault = yield req          #<----- What does this mean ?
Run Code Online (Sandbox Code Playgroud)

Dav*_*ebb 9

这一行有两件事情.更容易解释的是yield语句返回的值是一个序列,因此逗号获取序列的值并将它们放入变量中,如下所示:

>>> def func():
...     return (1,2,3)
...
>>> a,b,c = func()
>>> a
1
>>> b
2
>>> c
3
Run Code Online (Sandbox Code Playgroud)

现在,该yield语句用于创建一个生成器,它可以返回多个值而不是一个,每次使用时返回一个值yield.例如:

>>> def func():
...     for a in ['one','two','three']:
...         yield a
...
>>> g = func()
>>> g.next()
'one'
>>> g.next()
'two'
>>> g.next()
'three'
Run Code Online (Sandbox Code Playgroud)

实际上,该函数在yield语句处停止,等待在继续之前被要求输入下一个值.

在上面的示例中,next()从生成器获取下一个值.但是,如果我们使用,send()我们可以将值发送回生成器,由yield语句返回到函数中:

>>> def func():
...     total = 0
...     while True:
...        add = yield total
...        total = total + add
...
>>> g = func()
>>> g.next()
0
>>> g.send(10)
10
>>> g.send(15)
25
Run Code Online (Sandbox Code Playgroud)

把这一切放在一起我们得到:

>>> def func():
...     total = 0
...     while True:
...         x,y = yield total
...         total = total + (x * y)
...
>>> g = func()
>>> g.next()
0
>>> g.send([6,7])
42
Run Code Online (Sandbox Code Playgroud)

以这种方式使用的发电机称为协程.