I am not a python guy and I am trying to understand some python code. I wonder what the last line of below code does? Is that kind of multiple objects returned? or list of 3 objects returned?
req = SomeRequestBean()
req.setXXX(xxx)
req.YYY = int(yyy)
device,resp,fault = yield req #<----- What does this mean ?
Python provides no braces to indicate blocks of code for class and function definitions or flow control. Blocks of code are denoted by line indentation, which is rigidly enforced. The number of spaces in the indentation is variable, but all statements within the block must be indented the same amount.
You can clear up this invalid syntax in Python by switching out the semicolon for a colon. Here, once again, the error message is very helpful in telling you exactly what is wrong with the line.
There are two things going on in that line. The easier one to explain is that the yield
statement is returning a value which is a sequence, so the commas take values of the sequence and put them in the variables, much like this:
>>> def func():
... return (1,2,3)
...
>>> a,b,c = func()
>>> a
1
>>> b
2
>>> c
3
Now, the yield
statement is used to create a generator, which can return a number of values rather than just one, returning one value each time yield
is used. For example:
>>> def func():
... for a in ['one','two','three']:
... yield a
...
>>> g = func()
>>> g.next()
'one'
>>> g.next()
'two'
>>> g.next()
'three'
In effect, the function stops at the yield
statement, waiting to be asked for the next value before carrying on.
In the example above next()
gets the next value from the generator. However, if we use send()
instead we can send values back to the generator which are returned by the yield
statement back in to the function:
>>> 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
Putting this all together we get:
>>> def func():
... total = 0
... while True:
... x,y = yield total
... total = total + (x * y)
...
>>> g = func()
>>> g.next()
0
>>> g.send([6,7])
42
A generator used in this way is called a coroutine.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With