6
votes

Décorer une fonction qui donne

Est-ce possible, et si oui, conseillé et, dans l'affirmative, quelle serait la méthode recommandée de décorer une fonction qui donne une valeur?

Par exemple, considérez cet exemple imaginaire que j'ai composé < Pré> xxx


2 commentaires

Semble surchargé. Que voulez-vous dire spécifiquement par "décorer une fonction qui donne une valeur"? Quel cas d'utilisation avez-vous à l'esprit?


@ivan_pozdeev Case d'utilisation: J'ai un tas de fonctions de générateur qui donnent de nouvelles valeurs d'une API. Je veux appliquer des filtres sans toucher la fonction existante. Donc, pour un exemple d'exmaple Down def get_new (): résultat = new_result (); Résultat de rendement Je souhaite filtrer et donner uniquement des résultats, disons aux résultats qui contiennent la chaîne 'foobar' sans goudronner le NEW_RESULT Processus


4 Réponses :


6
votes

Une fonction de générateur, lorsqu'elle est appelée, renvoie un objet Itérateur. Si votre décorateur est lui-même un générateur aussi, vous devez boucle em> sur le résultat enveloppé: xxx pré>

Si vous utilisez Python 3.3 ou up, vous pouvez utiliser Délégation EM> à la main Contrôle du générateur emballé, en utilisant Rendement de Code>: P>

if flag:
    yield from gen


0 commentaires

2
votes

au lieu de donner à chaque valeur potentiel de retour , pourquoi ne pas donner que celles qui existent réellement? quelque chose comme xxx

(décorateur réel Syntaxe, manutention des arguments de position et de mots clés, etc. est omis de clarté.)


0 commentaires

2
votes

Pour le cas dans Commentaire42684128 , la solution est Aussi simple que: xxx

comme décorateur: xxx


0 commentaires

0
votes

Les réponses existantes ne traitent pas les générateurs qui cèdent et renvoient ensuite une valeur. Pour cela, vous devez retour (rendement de f ()) : xxx


0 commentaires