2017-10-19 1 views

Répondre

3

Ceci est indiqué dans la logique de PEP 492 qui a introduit async/await et interdisent l'utilisation de yield l'intérieur d'eux:

actuel Python supporte la mise en oeuvre coroutines via des générateurs (PEP 342), encore renforcée par le rendement de la syntaxe introduite dans PEP 380. Cette approche a un certain nombre de lacunes:

  • Il est facile de confondre coroutin es avec des générateurs réguliers, car ils partagent la même syntaxe; ceci est particulièrement vrai pour les nouveaux développeurs.

  • Si oui ou non une fonction est une coroutine est déterminée par une présence de rendement ou le rendement des états dans son corps, ce qui peut conduire à erreurs non évidentes lorsque ces déclarations apparaissent ou disparaissent de corps de la fonction pendant refactoring.

  • Prise en charge des appels asynchrones est limité aux expressions où le rendement est autorisé syntaxiquement, ce qui limite l'utilité des caractéristiques syntaxiques, comme avec et pour les déclarations.

Cela applique seulement en Python 3.5

En Python 3.6, PEP 525 est venu et a levé l'interdiction des générateurs asynchrones. Maintenant, en utilisant yield à l'intérieur des fonctions async def, un générateur asynchrone est créé.

+0

Merci. L'utilisation de 'yield 'dans une fonction' async def' entraîne-t-elle une coroutine? Quelle est la définition d'une coroutine? – Tim

+0

Une coroutine est une fonction qui peut générer des valeurs et accepter des valeurs pendant l'exécution de l'appelant. –