CATALOGUE Code & Data Formation Python Maîtriser Python Maîtrisez les Générateurs Avancés en Python

Maîtrisez les Générateurs Avancés en Python

Générateurs complexes : Listes en intentions et expressions génératrices
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

À l'issue de cette vidéo, vous serez capables de :

  • Comprendre le fonctionnement des générateurs en Python
  • Utiliser les expressions génératrices pour des transformation itérables
  • Économiser la mémoire lors de la manipulation de grands ensembles de données
  • Créer des générateurs complexes avec le mot-clé yield

Découvrez les générateurs en Python et apprenez à utiliser cette fonctionnalité avancée pour optimiser la gestion de la mémoire dans vos programmes.

Dans cette session, nous revisons la notion des générateurs et explorons leurs usages avancés en Python. Nous commençons par des listes en intention puis introduisons les expressions génératrices. Après avoir compris comment les générateurs peuvent transformer des itérables en de nouveaux itérables tout en économisant la mémoire, nous abordons leur application pratique en programmation. Les caractéristiques clés des générateurs, comme leur capacité à être lu une seule fois et leur mémoire limitée, sont détaillées à travers des exemples concrets. Les générateurs produisent les éléments à la demande, ce qui permet d'énormes économies de ressources lorsqu'on manipule des grands ensembles de données. Nous discutons également de l'utilisation du mot-clé yield pour créer des générateurs plus complexes. Enfin, l'importance de la lisibilité du code en Python est soulignée, surtout lorsque l'on utilise des expressions génératrices.

Voir plus
Questions réponses
Quelle est la principale différence entre une liste en intention et une expression génératrice?
Une liste en intention crée en mémoire une liste entière de valeurs, tandis qu'une expression génératrice produit les valeurs à la demande, économisant ainsi la mémoire.
Pourquoi une boucle forte sur un générateur ne peut-elle être exécutée qu'une seule fois?
Parce qu'un générateur est conçu pour être épuisé après une seule itération ; il ne stocke pas les valeurs en mémoire après leur génération.
Quels sont les avantages d'utiliser des générateurs en Python?
Les générateurs permettent des économies significatives en mémoire et en temps de calcul car ils produisent des valeurs à la demande et ne stockent pas les données inutilisées.

Programme détaillé

3 commentaires
5,0
3 votes
5
4
3
2
1
xavier.leleu
Il y a 1 jour
Bonjour,
Les thèmes variés agrémentés d'exemples simples et clairs enrichissent toutes les notions exposées de façon particulièrement pédagogique. 👍
L'approche didactique m'a permis de beaucoup mieux comprendre tout un tas de concepts plus ou moins bien assimilés auparavant avec une vue d'ensemble nettement plus limpide aujourd'hui. 🤓
Merci pour cette belle prestation. 🙏
michelkreutner
Il y a 1 an
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 3 ans
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")