DEV Community

sumandari
sumandari

Posted on • Edited on

Random todos with iterator vs generator

we can iterate objects in a list:

>>> persons = ["you", "I", "they"]
>>> for person in persons:
...     print(person)
... 
you
I
they
>>> 

Enter fullscreen mode Exit fullscreen mode

We can also create an iterable object that will behave like a list with __iter__ magic method. And put logic on __next__ method.

>>> import requests
>>> class RandomTodos:
...     url: str = 'https://jsonplaceholder.typicode.com/todos/'
...     def __init__(self, start=1):
...         self.current = start
...     def __next__(self):
...         current = self.current
...         res = requests.get(f"{self.url}{current}")
...         self.current += 1
...         return res.json().get('title', 'nothing todo')
...     def __iter__(self):
...         return self
... 
>>> person = ["you", "I", "they"]
>>> from pprint import pprint 
>>> pprint(list(zip(person, RandomTodos())))
[('you', 'delectus aut autem'),
 ('I', 'quis ut nam facilis et officia qui'),
 ('they', 'fugiat veniam minus')]
>>> todo = RandomTodos(3)
>>> next(todo)
'fugiat veniam minus'
>>> next(todo)
'et porro tempora'
Enter fullscreen mode Exit fullscreen mode

We can also use generator for that

>>> def random_todos(start=1):
...     url = "https://jsonplaceholder.typicode.com/todos/"
...     while True:
...         res = requests.get(f"{url}{start}")
...         yield res.json().get('title', 'nothing todo')
...         start += 1
... 
>>> todos = random_todos()
>>> next(todos)
'delectus aut autem'
>>> next(todos)
'quis ut nam facilis et officia qui'
>>> next(todos)
'fugiat veniam minus'
>>> person = ["you", "I", "they"]
>>> from pprint import pprint
>>> pprint(list(zip(person, random_todos())))
[('you', 'delectus aut autem'),
 ('I', 'quis ut nam facilis et officia qui'),
 ('they', 'fugiat veniam minus')]

Enter fullscreen mode Exit fullscreen mode

read more about iterator: https://wiki.python.org/moin/Iterator

free api endpoints for testing: https://jsonplaceholder.typicode.com

Image of Timescale

Timescale – the developer's data platform for modern apps, built on PostgreSQL

Timescale Cloud is PostgreSQL optimized for speed, scale, and performance. Over 3 million IoT, AI, crypto, and dev tool apps are powered by Timescale. Try it free today! No credit card required.

Try free

Top comments (0)

Retry later
👋 Kindness is contagious

Explore a sea of insights with this enlightening post, highly esteemed within the nurturing DEV Community. Coders of all stripes are invited to participate and contribute to our shared knowledge.

Expressing gratitude with a simple "thank you" can make a big impact. Leave your thanks in the comments!

On DEV, exchanging ideas smooths our way and strengthens our community bonds. Found this useful? A quick note of thanks to the author can mean a lot.

Okay