Je vais avoir du mal à comprendre l'utilisation de moteurs asynchrones interprétations introduites dans Python 3.6. Comme un avertissement, je n'ai pas beaucoup d'expérience avec le code asynchrone en général en Python.
L'exemple donné dans le quoi de neuf pour Python 3.6 document est:
result = [i async for i in aiter() if i % 2]
Dans le PEP, cela est élargi à:
result = []
async for i in aiter():
if i % 2:
result.append(i)
Je pense que je comprends que l' aiter()
fonction est appelée de manière asynchrone, de sorte que chaque itération de l' aiter
peut procéder sans précédent nécessairement revenir encore (ou est-ce la compréhension de mal?).
Ce que je ne suis pas sûr à ce sujet est de savoir comment cela se traduit alors par la compréhension de liste ici. Les résultats sont placés dans la liste dans l'ordre où ils sont retournés? Ou sont-il efficaces "espaces réservés" dans la liste finale, de sorte que chaque résultat est placé dans la liste dans l'ordre? Ou suis-je de penser à ce sujet dans le mauvais sens?
En outre, quelqu'un est en mesure de fournir des exemples concrets qui illustrent à la fois un cas d'utilisation et de la mécanique de base de la async
dans les interprétations de ce genre?