Nieuwe features van Python 3.8

2019-10-16

Elke zoveel tijd brengt de Python community een nieuwe versie van Python uit. De taal lijkt telkens nét weer een beetje mooier en handiger te worden. Ik zou zeggen: ook nu weer. Hieronder beschrijf ik de - naar mijn mening - vier meest opvallende toevoegingen met Python 3.8. Oordeel zelf!

 

 

Positional-only parameters

We hadden al keyword-only parameters voor functies en nu dus ook positional-only. Bij het aanroepen van een functie is het bij deze parameters verboden om de keywords te gebruiken. Zoiets als some_param=123 mag dan dus niet.

De syntax is als volgt:

def func(positional_only_parameters, 
         /, 
         positional_or_keyword_parameters, 
         *, 
         keyword_only_parameters): 
    ... 

 

Wanneer gebruik je wat?

Meestal hoef je je niet te bekommeren om keyword- of positional-only parameters. Alleen bij het bouwen van een toekomstbestendige API kun je je hier druk om maken. Je kunt dan de volgende vuistregels hanteren:

* Als je zeker bent over de volgorde, maar niet over de namen van de parameters, gebruik positional-only.

* Als je zeker bent over de namen van de parameters, maar niet over de volgorde, gebruik keyword-only.

 

Uitbreiding van f-strings

Steevaste debugger-geheelonthouders opgelet! Speciaal voor jullie is er een expressie toegevoegd aan de al bestaande f-strings. Je kunt nu met nóg minder code een string formatteren die de waarde van jouw variabelen weergeeft.

>>> awesome_language = 'Python'
>>> f'{awesome_language=}'
"awesome_language='Python'"

Handig! 

 

Walrus operator

De mooiste features krijgen de mooiste namen. De bijgenaamde “walrus operator” maakt het mogelijk om in een expressie een waarde toe te kennen aan een variabele. De naam “walrus” komt van de vorm van deze operator: := (een beetje fantasie is vereist).

Hieronder zie je de walrus in actie:

>>> some_array = [1, 2, 3]
>>> if (array_size := len(some_array)) == 3:
>>>     f'{array_size=}'
"array_size=3"

Handige feature, maar onthoud: readability counts. Leesbaarheid is altijd belangrijker dan het gebruiken van coole features.

 

And finally: the final

Er zal ongetwijfeld een goede reden voor zijn: je kunt nu classes en methoden final maken. Het wordt dan verboden om een class te overerven die gemarkeerd is met de @final decorator. Hetzelfde geldt voor final methodes: die mag je niet overschrijven.

@final
class Parent:
    ...
 
 
class Child(Parent):  # Error: Cannot inherit from final class "Parent"
    ...

 

Dit zijn wat mij betreft de meest significante toevoegingen aan de taal. Er zijn er natuurlijk nog meer. Voor wie daar nieuwsgierig naar is, die kan terecht op deze pagina.

Happy coding!

 

 


Bekijk alle posts van Ramon