def yield_tester(self):
value = yield
if value:
yield value
else:
yield 'no value'
def test_generators_can_see_if_they_have_been_called_with_a_value(self):
generator = self.yield_tester()
next(generator)
self.assertEqual('with value', generator.send('with value'))
generator2 = self.yield_tester()
next(generator2)
self.assertEqual('no value', next(generator2))
要点:
1 yield作为表达式,而不是语句。
2 使用send(value)之前,必须首先先调用next或者send()语句,初始化这个yield表达式,否则不能接收后续的value值。
3 至于这个send的用法优点在啥地方?作为函数调用?还是不太明白