This is the tenth in a collection of articles about options that first appeared in a model of Python three.x. Some of those variations have been out for some time. Python three.9 was first launched in 2020 with cool new options which are nonetheless underused. Here are three of them.
Adding dictionaries
Say you’ve a dictionary with “defaults,” and also you need to replace it with parameters. Before Python three.9, the best choice was to repeat the defaults dictionary after which use the .replace()
methodology.
Python three.9 launched the union operator to dictionaries:
defaults = dict(who="someone", the place="somewhere")
params = dict(the place="our town", when="today")
defaults | params
'who': 'somebody', 'the place': 'our city', 'when': 'immediately'
Note that the order issues. In this case, the the place
worth from params
overrides the default, because it ought to.
Removing prefixes
If you’ve finished advert hoc textual content parsing or cleanup with Python, you should have written code like:
def process_pricing_line(line):
if line.startswith("pricing:"):
return line[len("pricing:"):]
return line
process_pricing_line("pricing:20")
'20'
This sort of code is liable to errors. For instance, if the string is copied incorrectly to the following line, the value will grow to be zero
as an alternative of 20
, and it’ll occur silently.
Since Python three.9, strings have a .lstrip()
methodology:
"pricing:20".lstrip("pricing:")
'20'
Arbitrary decorator expressions
Previously, the principles about which expressions are allowed in a decorator have been underdocumented and laborious to know. For instance, whereas:
@merchandise.factor
def foo():
cross
is legitimate, and:
@merchandise.factor()
def foo():
cross
is legitimate, the same:
@merchandise().factor
def foo():
cross
produces a syntax error.
Starting in Python three.9, any expression is legitimate as a decorator:
from unittest import mockmerchandise = mock.MagicMock()
@merchandise().factor
def foo():
cross
print(merchandise.return_value.factor.call_args[zero][zero])
<operate foo at 0x7f3733897040>
While protecting to easy expressions within the decorator line continues to be a good suggestion, it’s now a human choice, relatively than the Python parser’s possibility.
Welcome to 2020
Python three.9 was launched about one yr in the past, however a number of the options that first confirmed up on this launch are cool—and underused. Add them to your toolkit if you have not already.