DEV Community

Luan Gomes
Luan Gomes

Posted on

2 2

What I've learned today - 2 - Walrus Operator (:=) in Python

What is?

The new operator allows variable assignments within expressions (also called Walrus Operator). It started as a proposal in PEP572 and became available in Python 3.8.

Benefits

  • Make things more compact.
  • Compress code when using regular expressions.
  • Speed up the processing of large data.
  • Code more readable.

Examples

A good example can be found in PEP572 documentation:

  • Current:

    reductor = dispatch_table.get(cls)
    if reductor:
        rv = reductor(x)
    else:
        reductor = getattr(x, "__reduce_ex__", None)
        if reductor:
            rv = reductor(4)
        else:
            reductor = getattr(x, "__reduce__", None)
            if reductor:
                rv = reductor()
            else:
                raise Error(
                    "un(deep)copyable object of type %s" % cls)
    
    
  • Improved:

    if reductor := dispatch_table.get(cls):
        rv = reductor(x)
    elif reductor := getattr(x, "__reduce_ex__", None):
        rv = reductor(4)
    elif reductor := getattr(x, "__reduce__", None):
        rv = reductor()
    else:
        raise Error("un(deep)copyable object of type %s" % cls)
    

This code is from python's core, and is a improved version of copy.py

We can use in any condition structure:

# While loop
while (command := input("> ")) != "quit":
    print("You entered:", command)
Enter fullscreen mode Exit fullscreen mode
# Any
if any((comment := line).startswith('#') for line in lines):
    print("First comment:", comment)
else:
    print("There are no comments")

Enter fullscreen mode Exit fullscreen mode
# List comprehenssion
stuff = [[(f(x) as .y), x/.y] for x in range(5)] # with "as"
Enter fullscreen mode Exit fullscreen mode

Observations

The operator cannot be used for everything, in some cases he won't work:

a := 1 #INVALID must be done with a=1.
a = b := 2 #INVALID must be done with a=b=2
Enter fullscreen mode Exit fullscreen mode

I appreciate everyone who has read through here, if you guys have anything to add, please leave a comment.

Image of Timescale

🚀 pgai Vectorizer: SQLAlchemy and LiteLLM Make Vector Search Simple

We built pgai Vectorizer to simplify embedding management for AI applications—without needing a separate database or complex infrastructure. Since launch, developers have created over 3,000 vectorizers on Timescale Cloud, with many more self-hosted.

Read more

Top comments (0)

Postmark Image

Speedy emails, satisfied customers

Are delayed transactional emails costing you user satisfaction? Postmark delivers your emails almost instantly, keeping your customers happy and connected.

Sign up