You can find the new features (post) here: https://www.codementor.io/ruturajkiranvaidya/introduction-to-python-3-8-new-feature-the-walrus-operator-vcv2d3zxw?utm_swu=7179
The walrus operator :=
This operator, the Walrus operator, let you assigns the value of a variable to another to use it as part of an expression.
sample_data = [
{"userId": 1, "id": 1, "title": "delectus aut autem", "completed": False},
{"userId": 1, "id": 2, "title": "quis ut nam facilis", "completed": False},
{"userId": 1, "id": 3, "title": "fugiat veniam minus", "completed": False},
{"userId": 1, "id": 4, "title": "et porro tempora", "completed": True},
{"userId": 1, "id": 4, "title": None, "completed": True},
]
print("With Python 3.8 Walrus Operator:")
for entry in sample_data:
if title := entry.get("title"):
print(f'Found title: "{title}"')
print("Without Walrus operator:")
for entry in sample_data:
title = entry.get("title")
if title:
print(f'Found title: "{title}"')
Example from (https://medium.com/hultner/try-out-walrus-operator-in-python-3-8-d030ce0ce601).
ith Python 3.8 Walrus Operator: Found title: "delectus aut autem" Found title: "quis ut nam facilis" Found title: "fugiat veniam minus" Found title: "et porro tempora" Without Walrus operator: Found title: "delectus aut autem" Found title: "quis ut nam facilis" Found title: "fugiat veniam minus" Found title: "et porro tempora"
Other example
import re
with open("sample.txt") as file:
for line in file:
if text := re.findall("f",line):
print(line.strip())
print(text)
print("\n--------- without := -------------\n")
with open("sample.txt") as file:
for line in file:
text = re.findall("f",line)
if (text):
print(line.strip())
print(text)
fafsdfg ['f', 'f', 'f'] sdfgs ['f'] fdg ['f'] hsfhfghfs ['f', 'f', 'f'] --------- without := ------------- fafsdfg ['f', 'f', 'f'] sdfgs ['f'] fdg ['f'] hsfhfghfs ['f', 'f', 'f']
Other … examples
# instead of x = [f(x), f(x)**2, f(x)**3] # you can do x = [y := f(x), y**2, y**3] # for more efficiency
lines = [1,2,3]
def f(x):
if x > 1:
return x
d = []
for l in lines:
if f(l):
d.append(l)
# you can do so
d = [y for l in lines if (y := f(l))]