At first I thought they were pretty much the same thing.
But generators pick up from where they left off,
while lists don't.
This fixes the edge-case infinite loop
that was happening last commit.
from the python repl
Lists
>>> data = [1,2,3,4,5]
>>> for i in data:
... print(i)
... if i == 2:
... for ii in data:
... print('>', ii)
... if ii == 4:
... break
...
1
2
> 1
> 2
> 3
> 4
3
4
5
Generators
>>> data = [1,2,3,4,5]
>>> gen = (d for d in data)
>>> for i in gen:
... print(i)
... if i == 2:
... for ii in gen:
... print('>', ii)
... if ii == 4:
... break
...
1
2
> 3
> 4
5
# If the template is a list
if type(template) is list:
# Then we don't need to tokenize it
- tokens = template
+ # But it does need to be a generator
+ tokens = (token for token in template)
else:
# Otherwise make a generator
tokens = tokenize(template, def_ldel, def_rdel)