Using the Python walrus operator

First published:

Last Edited:

Number of edits:

A pattern I often encounter is iterating through a range of values, computing an operation on those values and assigning them to a variable. For example, imagine you are saving files and you don't want to over write them, I create an index and keep increasing it until I get a filename which is available. Something like this:

filename = 'data_{}.dat'
i = 0
while os.path.exists(filename.format(i)):
    i+=1

file = filename.format(i)
data.save(file)

Python (I believe 3.8) has introduced a new operator called Walrus , which greatly simplifies the code above:

i = 0
filename = 'data_{}.dat'
while os.path.exists(file := filename.format(i)):
    i += 1

data.save(file)

The walrus operator allows to assign variables to expressions within another expression. In this case, we assigned filename.format(i) to file and check its existence.

If you want to see a real-world example of when I would use the walrus, check this few lines of code or these ones , in which I search for an appropriate filename.

A caveat : parenthesis play an important role in order resolution:

var = [1, 2, 3, 4]
if n := len(var) > 3:
    print(n)

Outputs True , while:

var = [1, 2, 3, 4]
if (n := len(var)) > 3:
    print(n)

Outputs 4 . In the example with the filename it was not an issue because I was using already another function with the output of the walrus.

I am still hesitant about adding this syntax, since it only works on latest versions of Python which are still not the default on Linux.


Backlinks

These are the other notes that link to this one.

Comment

Share your thoughts on this note
Aquiles Carattino
Aquiles Carattino
This note you are reading is part of my digital garden. Follow the links to learn more, and remember that these notes evolve over time. After all, this website is not a blog.
© 2021 Aquiles Carattino
This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License
Privacy Policy