diff options
| author | Paul Sokolovsky | 2014-03-30 23:14:55 +0300 |
|---|---|---|
| committer | Paul Sokolovsky | 2014-03-30 23:30:16 +0300 |
| commit | f39d3b93da4b9205a095430e12472051c6b22ef6 (patch) | |
| tree | b2f56443f9646bef8035b4a527f1d1f533e6196e /tests/basics | |
| parent | a30cf9f3aff671ada1c84a1977ecf96d473d7256 (diff) | |
py: Implement support for generalized generator protocol.
Iterators and ducktype objects can now be arguments of yield from.
Diffstat (limited to 'tests/basics')
| -rw-r--r-- | tests/basics/gen-yield-from-ducktype.py | 44 | ||||
| -rw-r--r-- | tests/basics/gen-yield-from-iter.py | 8 |
2 files changed, 52 insertions, 0 deletions
diff --git a/tests/basics/gen-yield-from-ducktype.py b/tests/basics/gen-yield-from-ducktype.py new file mode 100644 index 000000000..aa0109c91 --- /dev/null +++ b/tests/basics/gen-yield-from-ducktype.py @@ -0,0 +1,44 @@ +class MyGen: + + def __init__(self): + self.v = 0 + + def __iter__(self): + return self + + def __next__(self): + self.v += 1 + if self.v > 5: + raise StopIteration + return self.v + +def gen(): + yield from MyGen() + +def gen2(): + yield from gen() + +print(list(gen())) +print(list(gen2())) + + +class Incrementer: + + def __iter__(self): + return self + + def __next__(self): + return self.send(None) + + def send(self, val): + if val is None: + return "Incrementer initialized" + return val + 1 + +def gen3(): + yield from Incrementer() + +g = gen3() +print(next(g)) +print(g.send(5)) +print(g.send(100)) diff --git a/tests/basics/gen-yield-from-iter.py b/tests/basics/gen-yield-from-iter.py new file mode 100644 index 000000000..2d06328fb --- /dev/null +++ b/tests/basics/gen-yield-from-iter.py @@ -0,0 +1,8 @@ +def gen(): + yield from (1, 2, 3) + +def gen2(): + yield from gen() + +print(list(gen())) +print(list(gen2())) |
