Python walrus operator

#Day10 – Walrus Operator in Python

Posted by

In today’s article, we will talk about the Walrus Operator := in Python. The walrus operator is an assignment operator which was introduced in Python 3.8. But it is not just an assignment operator, it also returns the value after the assignment.

This is the general syntax of the walrus operator

(var := expression/ function)

Although the parenthesis is not necessary, it is a good practice

So what does the Walrus operator do?

  • The value of the expression is assigned to the variable var
  • After assignment, the value is also returned.

Before Python 3.8, if you wanted to assign the value returned by an expression/function to a variable and print the value, below is how you would do it

var = expression/function
print(var)

But using the walrus operator, this can be done in a single line

print(var := expression/function)

Let’s compare some code snippets with and without the walrus operator

Print statements

Python 3.7

def func(x):
    return x+1

var = 0
var = func(var)
print(var)

Python 3.8

def func(x):
    return x+1

var = 0
print( var := func(var) )

The value returned by the function func is first assigned to the variable var. After the assignment, the value is returned and the print statement displays it on the command line.

If statements

Python 3.7

lst = [1,2,3]
n = len(lst)
if n < 10:
    print("It is a small list")
print(n)

Python 3.8

lst = [1,2,3]
if (n:= len(lst)) < 10:
    print("It is a small list")
print(n)

while loop

Python 3.7

n = 0
while(n < 10):
    print(n)
    n +=1

Python 3.8

n = 0
while(n := n +1) < 10:
    print(n)

Lists

Python 3.7

def func(x):
    return x + 1

y = func(2)
lst = [y , y*y , y*y*y]
print(lst)

Python 3.8

def func(x):
    return x + 1

lst = [y:=func(2),y*y,y*y*y]
print(lst)

List Comprehension

Python 3.7

def computationally_expensive_function(x):
    '''
    Imagine this is some computatationally expensive function
    '''
    return 2

nums = [1,2,3]

lst = [computationally_expensive_function(num) for num in nums if computationally_expensive_function(num) > 0]
print(lst)

Python 3.8

def computationally_expensive_function(x):
    '''
    Imagine this is some computatationally expensive function
    '''
    return 2

nums = [1,2,3]

lst = [var for num in nums if (var := computationally_expensive_function(num))> 0]
print(lst)

Instead of calling the computation expensive function twice, we only call it once when using the walrus operator.