When to use generator functions and when to use loops in Python

2024/10/15 10:19:36

I am coming from a Matlab background and I am finding it difficult to get around the concept of generators in Python.

Can someone please answer me the following:

  1. The difference between a generator function and a loop
  2. When each should be implemented
Answer

A generator provides a way to create elements "on the fly" without holding them all in memory before we start going over them. A loop is simply a way to make the generator, or another iterable, give us one element at a time.

For example:

for i in range(10):print(i)

The for block is a loop, and range is basically a generator. range doesn't create a list from 1-10 before the loop starts, it just creates the generator, the creator of these elements. You can also imagine range(1000000000000000000), which again wouldn't take any time to create (and won't take up memory) because none of the elements are created until they are needed.

On the other hand, our loop can also take one element from objects that already exist, like a list:

for i in [0,1,2,3,4,5,6,7,8,9]:print(i)

The same result would be printed, but the list is created and stored in its entriety before the loop starts. This means that while the loop is running, the list takes up memory space and time to create.

Both the examples are loops, but only the first one uses a generator.

This is just the basics, but there are more differences, like exceptions that can be raised and re-usability, iterating in parts, and more.

For more on the difference

EDIT: @Vicrobot is correct in stating that range isn't really a generator, but for the purposes of explaining the "laziness" of generators that's what I used for simplicity

https://en.xdnf.cn/q/69297.html

Related Q&A

Airflow - Disable heartbeat logs

My logs are getting completely flooded with useless messages for every heartbeat. [2019-11-27 21:32:47,890] {{logging_mixin.py:112}} INFO - [2019-11-27 21:32:47,889] {local_task_job.py:124} WARNING - T…

different validation in drf serializer per request method

Lets say i have a model like so:class MyModel(models.Model):first_field = models.CharField()second_field = models.CharField()and an API view like so:class MyModelDetailAPI(GenericAPIView):serializer_cl…

How to import r-packages in Python

Im a bit troubled with a simple thing. I was trying to install a package called hunspell, but I discovered it is originally an R package. I installed this version: https://anaconda.org/conda-forge/r-hu…

XPath predicate with sub-paths with lxml?

Im trying to understand and XPath that was sent to me for use with ACORD XML forms (common format in insurance). The XPath they sent me is (truncated for brevity):./PersApplicationInfo/InsuredOrPrinci…

Best way to access and close a postgres database using python dataset

import dataset from sqlalchemy.pool import NullPooldb = dataset.connect(path_database, engine_kwargs={poolclass: NullPool})table_f1 = db[name_table] # Do operations on table_f1db.commit() db.execut…

Using different binds in the same class in Flask-SQLAlchemy

I currently have multiple databases with identical Tables and Columns (but different data inside). So clearly I need to use binds to access all of them, but its apparently not as simple as doing this:c…

Correctly parse date string with timezone information

Im receiving a formatted date string like this via the pivotal tracker API: "2012/06/05 17:42:29 CEST"I want to convert this string to a UTC datetime object, it looks like python-dateutil doe…

Can I add a sequence of markers on a Folium map?

Suppose I had a list, or pandas series, or latitude longitude pairs. With Folium, I can plot markers for a single pair of coordinates using coords = [46.8354, -121.7325] map_4 = folium.Map(location=[4…

Tkinter in Python 3.4 on Windows dont post internal clipboard data to the Windows clipboard on exit

I use the following code to place result of my small scripts in clipboard.from tkinter import Tk r = Tk() r.withdraw() r.clipboard_clear() r.clipboard_append("Result")It works fine on Python …

How do I group date by month using pd.Grouper?

Ive searched stackoverflow to find out how to group DateTime by month and for some reason I keep receiving this error, even after I pass the dataframe through pd.to.datetimeTypeError: Only valid with D…