Skip to content

Avec with : plus d’indentations, moins d’instructions

30 décembre 2017

En python, le mot-clef with permet d’ouvrir un bloc dans lequel un contexte spécifique est actif.

L’exemple de « context manager » le plus courant est celui d’une ouverture de fichier qui se ferme automagiquement :

with open('sortie.txt', 'w') as f:
    f.write('Coucou')
f.closed # vaut True

On retrouve cette possibilité dans de nombreux cas comme l’ouverture d’un serveur SMTP :

from smtplib import SMTP
with SMTP("domain.org") as smtp:
    # faire des trucs
#la connection smtp est fermée

L’utilisation d’un « context manager » est adapté à chaque fois qu’il est nécessaire de réaliser des tâches à l’ouverture ou la fermeture (libérer un verrou, fermer une connection, supprimer un fichier, changer une variable globale, etc.). Cela permet de se concentrer ce qu’on veut vraiment faire dans le contexte du with. Les tâches d’ouverture et fermetures sont respectivement déplacées dans les méthodes magiques __enter__() et __exit__(). Si l’on prend en compte l’ensemble du code source, il n’y a donc pas moins d’instructions. Et le titre de l’article peut être considérée comme de la publicité mensongère.

class Pipeau:

    def __enter__(self):
        print("<bonimenteur>")

    def __exit__(self, type, value, traceback):
        print("</bonimenteur>")

with Pipeau():
    print("Prochain article de blog à -50 % !")

# affiche :
# <bonimenteur>
# Prochain article de blog à -50 % !
# </bonimenteur>

Pour plus de détails sur l’utilisation de with, consultez la documentation Python et l’article de sametmax.

Publicités

From → Python

Laisser un commentaire

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion /  Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion /  Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion /  Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion /  Changer )

w

Connexion à %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.

%d blogueurs aiment cette page :