Maîtriser les Décorateurs en Python : Concepts Avancés

Les décorateurs poussés à l'extrême
Vidéo non disponible ! Réessayez plus tard
Cette vidéo fait partie de la formation
Maîtriser Python
Revoir le teaser Je m'abonne
5,0
Transcription


99,00€ Je commande

Formation incluse dans l'abonnement Elephorm Je m'abonne à Elephorm

DescriptionProgrammeAvis
5,0

99,00€ Je commande

Formation incluse dans l'abonnement Elephorm Je m'abonne à Elephorm

Les objectifs de cette vidéo sont :

- Comprendre les concepts avancés des décorateurs en Python

- Savoir configurer et utiliser des décorateurs dynamiquement

- Apprendre à préserver les métadonnées des fonctions avec @wraps

- Créer un mini système d'événements avec des décorateurs

- Appliquer des décorateurs aux classes

Explorez les techniques avancées de décorateurs en Python pour optimiser et configurer vos fonctions efficacement.

Dans cette leçon, nous approfondirons l'utilisation des décorateurs en Python.

Nous couvrirons comment passer des paramètres à un décorateur, rendre un décorateur configurable, et utiliser des concepts avancés comme le paramétrage dynamique.

Vous apprendrez également à utiliser le décorateur @wraps de la bibliothèque functools pour préserver les métadonnées de la fonction originale.

En outre, nous montrerons comment créer un mini système d'événements avec des décorateurs et comment appliquer des décorateurs aux classes pour des usages professionnels avancés.

Cette leçon est essentielle pour ceux qui veulent maîtriser les décorateurs en Python et améliorer leurs compétences en programmation.

Voir plus
Questions réponses
Qu'est-ce que le décorateur @wraps et pourquoi est-il utilisé?
Le décorateur @wraps est utilisé pour préserver les métadonnées de la fonction originale lorsque celle-ci est décorée. Cela permet de conserver le nom, la docstring et autres attributs de la fonction décorée.
Comment rendre un décorateur en Python configurable?
Pour rendre un décorateur configurable, il faut créer une fonction qui retourne un décorateur. Cela implique d'avoir trois niveaux : une fonction qui crée la configuration, le décorateur lui-même, et la fonction wrapper.
Quels problèmes le paramétrage dynamique résout-il dans les décorateurs?
Le paramétrage dynamique résout le problème de compatibilité des décorateurs avec des fonctions ayant des nombres et types d'arguments variés. Il permet d'accepter et de répartir n'importe quel nombre de paramètres.

Programme détaillé

2 commentaires
5,0
2 votes
5
4
3
2
1
michelkreutner
Il y a 11 months
Commentaire
Les explications sont claires et concises. Ce cours sur l'utilisation avancée de Python est tres intéressant. Il vous apportera des connaissances que vous pourrez ensuite approfondir.
Je suis vraiment tres satisfait par cette première formation suivie sur Python.
yvan.vogel
Il y a 2 years
Commentaire
Hello, sur la video autour de asyncio, vous utilisez python 2.7.12. J'utilise python 3.10, aussi je souhaite faire partager mon code (qui fonctionne) selon ma vision et compréhension sur le sujet d'étude que vous avez proposé. Yvan Vogel.

#CODE en python 3.10.0 64 bits (VScode 1.62.3)
import datetime
import asyncio
import aiohttp
import requests


# ----------------------------------------------------------------------------------------------------------------------------
def req_bloquante(num):
print(f"Get {num}")
uid = requests.get("https://httpbin.org/uuid").json()["uuid"]
print(f"Res {num}: {uid}")


def faire_toutes_les_requetes():
for x in range(51):
req_bloquante(x)


print("=====> ### Bloquant : ")
start = datetime.datetime.now()
faire_toutes_les_requetes()
exec_time = (datetime.datetime.now() - start).seconds
print(f"Downloading all take {exec_time} seconds\n")

# ----------------------------------------------------------------------------------------------------------------------------


async def requeteSansBloquer(semaphore, num, session):
print(f"Get {num}")
# await semaphore.acquire() # putting this await semaphore commande the Res is ordering but process very slow ~60 sec
async with session.get("https://httpbin.org/uuid") as response:
uid = (await response.json())["uuid"]
# await asyncio.sleep(delay=3) #delay = number of seconds
# semaphore.release()
print(f"Res {num}: {uid}")
# return uid # ?


async def main():
semaphore = asyncio.Semaphore(value=1)
tasks = []
async with aiohttp.ClientSession(
loop=loop, connector=aiohttp.TCPConnector(ssl=False)
) as session:
for x in range(51):
tasks.append(requeteSansBloquer(semaphore, x, session))
await asyncio.gather(*tasks)
print("This is after the loop...")


if __name__ == "__main__":
print("=====> ### Non Bloquant : ")
start = datetime.datetime.now()
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
exec_time = (datetime.datetime.now() - start).microseconds
print(f"Downloading all take {exec_time} micro seconds\n")