我不是一个蟒蛇人,我想了解一些Python代码。我想知道下面的代码的最后一行是什么?那种多个对象返回了吗?或返回3个对象的列表?这个python语法是什么意思?
req = SomeRequestBean()
req.setXXX(xxx)
req.YYY = int(yyy)
device,resp,fault = yield req #<----- What does this mean ?
我不是一个蟒蛇人,我想了解一些Python代码。我想知道下面的代码的最后一行是什么?那种多个对象返回了吗?或返回3个对象的列表?这个python语法是什么意思?
req = SomeRequestBean()
req.setXXX(xxx)
req.YYY = int(yyy)
device,resp,fault = yield req #<----- What does this mean ?
该行有两件事情正在进行。越容易一个解释是,yield
语句返回的值是一个序列,因此逗号取序列的值,并把它们的变量,就像这样:
>>> def func():
... return (1,2,3)
...
>>> a,b,c = func()
>>> a
1
>>> b
2
>>> c
3
现在,yield
声明用于create a generator,它可以返回多个值而不是一个值,每次使用yield
时返回一个值。例如:
>>> def func():
... for a in ['one','two','three']:
... yield a
...
>>> g = func()
>>> g.next()
'one'
>>> g.next()
'two'
>>> g.next()
'three'
实际上,功能停止在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
把所有这些组合起来,我们得到:
>>> def func():
... total = 0
... while True:
... x,y = yield total
... total = total + (x * y)
...
>>> g = func()
>>> g.next()
0
>>> g.send([6,7])
42
一以这种方式使用的发电机是called a coroutine。
的最后一行是由所显示的代码位于该协程的send
方法拆包的元组
也就是说,它在函数发生:
def coroutine(*args):
yield None
req = SomeRequestBean()
req.setXXX(xxx)
req.YYY = int(yyy)
device,resp,fault = yield req
然后有客户端代码,看起来像这样的地方。
co = coroutine(*args)
next(co) # consume the first value so we can start sending.
co.send((device, resp, fault))
这不涉及协同程序一个简单的例子是沿
a, b, c = (1, 2, 3)
或(略票友)
for a, b in zip(['a', 'b'], [1, 2]):
print a, b
这里拉链返回元组获取解压东西线到a
和b
。所以一个元组看起来像('a', 1)
,然后a == 'a'
和b == 1
。