Tutoriel Python With – explication

Tutoriel Python With - explication
Tutoriel Python With - explication

Python With – En Python, l’instruction with est utilisée dans la gestion des exceptions pour rendre le code plus propre et beaucoup plus lisible.

Nous allons profiter de cet article pour mieux comprendre son utilisation.

Tu peux retrouver tous nos tutoriels sur cette page : cliquez ici

Tutoriel Python With

L’instruction with simplifie la gestion des ressources communes telles que les flux de fichiers.

Regardons l’exemple suivant sur la façon dont l’utilisation de l’instruction with rend le code plus propre. 

# écriture dans un fichier

# 1) sans l'utilisation de l'instruction with

file = open('file_path', 'w')
file.write('hello world !')
file.close()

# 2) sans l'utilisation de l'instruction with

file = open('file_path', 'w')
try:
    file.write('hello world')
finally:
    file.close()

# avec l'utilisation de l'instruction with

with open('file_path', 'w') as file:
    file.write('hello world !')

Veuillez noter que contrairement aux deux premières approches, il n’est pas nécessaire d’appeler file.close() lors de l’utilisation de l’instruction with. L’instruction with gère elle-même l’acquisition et la libération appropriées des ressources. Cela a pour effet de rendre le code plus lisible et de réduire de moitié le nombre de lignes.

Dans la première approche, une exception survenue lors de l’appel de file.write() peut empêcher la fermeture correcte du fichier, ce qui peut introduire plusieurs bugs dans le code. En d’autres termes, de nombreuses modifications dans les fichiers ne prendront effet que lorsque le fichier sera correctement fermé.

La deuxième approche de l’exemple ci-dessus gère toutes les exceptions, mais l’utilisation de l’instruction with rend le code plus concis et bien plus lisible. Par conséquent, l’utilisation de l’instruction with permet de prévenir les erreurs et les fuites en garantissant qu’une ressource est correctement libérée lorsque le code ayant recours à cette ressource est entièrement exécuté. L’instruction with est couramment employée avec les flux de fichiers, comme démontré ci-dessus, ainsi qu’avec les verrous, les sockets, les processus fils et les connexions Telnet, entre autres.

L’instruction « with » dans nos objets

Il n’y a rien d’extraordinaire dans la fonction open() qui la rend utilisable avec l’instruction with, et une fonctionnalité similaire peut être implémentée dans des objets que nous avons définis.

En supportant l’instruction with dans vos propres objets, vous vous assurez de ne jamais laisser de ressources ouvertes. Pour utiliser l’instruction with dans des objets personnalisés, vous devez simplement inclure les méthodes __enter__() et __exit__() dans les méthodes de l’objet, comme illustré dans l’exemple suivant pour plus de clarté.

# a simple file writer object

class EcrireDansUnFichier(object):

    def __init__(self, file_name):
        self.file_name = file_name

    def __enter__(self):
        self.file = open(self.file_name, 'w')
        return self.file

    def __exit__(self, *args):
        self.file.close()

# utilisation de with sur mon objet EcrireDansUnFichier

with EcrireDansUnFichier('mon_fichier.txt') as monFichier:
  monFichier.write('hello world')

Regardons à présent comment le Python analyse notre code ci-dessus.

Dès que l’exécution pénètre dans le contexte de l’instruction with, un objet EcrireDansUnFichier est créé et Python appelle ensuite la méthode __enter__(). À l’intérieur de cette méthode __enter__(), vous effectuez l’initialisation de la ressource que vous souhaitez utiliser dans l’objet. Il est important de noter que cette méthode __enter__() doit toujours renvoyer un descripteur de la ressource acquise.

Mais qu’entendons-nous par « descripteurs de ressources » ? Il s’agit des handles fournis par le système d’exploitation pour accéder aux ressources demandées. Dans le cas de l’exemple donné, file est un descripteur de ressource pour le flux de fichiers.

Une fois que le code à l’intérieur du bloc with s’est exécuté, la méthode __exit__() est automatiquement appelée. C’est dans cette méthode __exit__() que toutes les ressources acquises sont libérées. C’est précisément de cette manière que nous utilisons l’instruction with avec des objets définis par l’utilisateur.

Cette interface, basée sur les méthodes __enter__() et __exit__(), qui permet de prendre en charge l’instruction with avec des objets personnalisés, est appelée « Context Manager ».

Conclusion – Python With

A présent l’instruction Python with n’a plus de secret pour vous. En espérant que ce petit tutoriel vous sera utile pour améliorer l’ensemble de vos codes en Python.

[ Article lu 1 fois aujourd'hui ]
A propos Judicaël Paquet 942 Articles
  Paquet Judicaël (expert en transformation et AI) Mes activités en France et en Suisse : - ingénieur prompt - coach AI - architecte de transformation agile - formations agiles personnalisées - sensibilisations et coaching de manager - audits de maturité agile et de situations - coaching agile (équipes, orga, product owner, scrum master, coach agile) Spécialités : scrum, kanban, management 3.0, agilité à l’échelle, lean startup, méthode agile, prompt AI, Intelligence artificielle. [Me contacter]

Soyez le premier à commenter

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée.


*


Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.