we can iterate objects in a list:
>>> persons = ["you", "I", "they"]
>>> for person in persons:
... print(person)
...
you
I
they
>>>
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'
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')]
read more about iterator: https://wiki.python.org/moin/Iterator
free api endpoints for testing: https://jsonplaceholder.typicode.com
Top comments (0)