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é p> < Pré> xxx pré> p>
4 Réponses :
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é: 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
au lieu de donner à chaque valeur potentiel de retour em>, pourquoi ne pas donner que celles qui existent réellement? em> quelque chose comme (décorateur réel Syntaxe, manutention des arguments de position et de mots clés, etc. est omis de clarté.) p> p>
Pour le cas dans Commentaire42684128 , la solution est Aussi simple que: comme décorateur: p>
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 ()) code>:
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 Code> Je souhaite filtrer et donner uniquement des résultats, disons aux résultats qui contiennent la chaîne 'foobar' sans goudronner le
NEW_RESULT code> Processus