Maison > Périphériques technologiques > Industrie informatique > Astuce rapide: comprendre le mot clé de rendement en python

Astuce rapide: comprendre le mot clé de rendement en python

Jennifer Aniston
Libérer: 2025-02-18 10:20:10
original
572 Les gens l'ont consulté

Quick Tip: Understanding the Yield Keyword in Python

Astuce rapide: comprendre le mot clé de rendement en python

Merci à Shaumik Daityari pour avoir aidé à avoir aidé les pairs à réviser cet article.

Lorsque nous appelons une fonction dans Python, la fonction commencera normalement à fonctionner jusqu'à ce qu'elle rencontre un retour, une exception ou atteint sa fin - après quoi il renvoie le contrôle à l'appelant. Chaque fois que vous appelez à nouveau cette fonction, le processus commencera à partir de Scratch !

Dites que vous avez demandé à une personne de suivre les voitures rouges sur la route. La personne continuera à avoir une question lui demandant si elle a repéré une voiture rouge ou non, et la personne à son tour répondrait avec «oui» ou «non». Si la personne répondait «oui», le nombre de fois où la voiture rouge a été repérée augmentera.

Voyons comment nous pouvons le faire dans Python:

import time

def red_cars(answer):
    n = 0
    while True:
        if answer == 'yes':
            n = n + 1
            return n
        else:
            return n

stop = time.time() + 5 * 60
while time.time() < stop:
    answer = raw_input('Did you spot a red car on the road? ("yes" or "no"): ')
    times = red_cars(answer)
    print 'You have spotted ' + str(times) + ' cars so far!'
Copier après la connexion

Si vous exécutez le programme, que remarquez-vous? Avez-vous remarqué que le nombre de fois pour la réponse «oui» est toujours plafonné à 1, et lorsque vous répondez «non», le nombre de fois obtient 0, peu importe «oui» avant?

Voici où le mot clé de rendement de Python entre en jeu. Le rendement est un moyen par lequel nous temporairement contrôle de la main à l'appelant, et nous nous attendons à continuer à partir du point où le contrôle a été remis.

Avant de donner la solution à l'exemple ci-dessus, permettez-moi de démontrer un exemple très simple pour mieux illustrer le fonctionnement du rendement.

dire que nous avons le script Python simple suivant:

def step_by_step():
    return 'step 1'
    return 'step 2'
    return 'step 3'
    
step = step_by_step()
for i in range (3):
    print step
Copier après la connexion

Si vous exécutez le script, vous obtiendrez la sortie suivante:

step 1
step 1
step 1
Copier après la connexion

Maintenant, si nous utilisons le rendement à la place, comme suit:

def step_by_step():
    yield 'step 1'
    yield 'step 2'
    yield 'step 3'
    
step = step_by_step()
for i in range (3):
    print step.next()
Copier après la connexion

La sortie serait la suivante:

step 1
step 2
step 3
Copier après la connexion

Comme vous pouvez le voir, nous avons pu créer une série de valeurs, car pour chaque appel, la fonction continue à partir du point où il donne une valeur. Ce type de fonction est appelé générateur. Une telle fonction crée un itérateur de générateur, comme avec chaque appel à la méthode suivante () nous passons à l'instruction de rendement suivante.

Si nous revenons à notre exemple principal (voitures rouges), elle peut être écrite comme suit pour effectuer la tâche requise:

import time

def red_cars(answer = None):
    n = 0
    while True:
        if answer=="yes":
            n = n + 1
            answer = yield n
        else:
            answer = yield n

car_color = red_cars()
car_color.next()

stop = time.time() + 5 * 60
while time.time() < stop:
    answer = raw_input('Did you spot a red car on the road? ("yes" or "no"): ')
    print 'You have spotted ' + str(car_color.send(answer)) + ' cars so far!'
Copier après la connexion

Ainsi, comme nous pouvons le voir, le rendement est jugé important lorsque nous sommes intéressés à reprendre l'exécution au dernier point où la fonction (générateur) est sortie et où nous sommes également intéressés à garder les valeurs des variables locales entre les différents appels - Contrairement aux fonctions normales, où de telles valeurs sont détruites lors de la sortie de la fonction.

Il existe cependant d'autres utilisations du rendement. Par exemple, vous pouvez utiliser le rendement si vous avez une fonction qui renvoie une séquence (par exemple, les lignes dans une feuille Excel) et que vous devez itérer sur la séquence sans avoir chaque valeur en mémoire à la fois. C'est-à-dire pour enregistrer la mémoire.

Le rendement peut également être utilisé lorsque vous travaillez avec des iterables, où nous avons une grande liste difficile à passer entre les fonctions. Par exemple, les fonctions intégrées de Python pour les permutations et les combinaisons dans le module Itertools utilisent le rendement.

Questions fréquemment posées (FAQ) sur le mot clé de rendement dans Python

Quelle est la différence entre les mots clés de rendement et de retour dans python?

Les mots clés de rendement et de retour dans Python sont utilisés dans les fonctions, mais ils servent des objectifs différents. Le mot clé de retour est utilisé lorsque vous souhaitez qu'une fonction produise une valeur, puis se termine. Une fois qu'une fonction renvoie une valeur, il est fait de l'exécution et du contrôle est remis à l'appelant. D'un autre côté, le mot clé de rendement est utilisé dans une fonction comme une instruction de retour, mais elle produit une valeur et suspend l'exécution de la fonction. La fonction peut être reproduite plus tard à partir de l'endroit où il s'était arrêté, ce qui lui permet de produire une série de valeurs au fil du temps, au lieu de les calculer en même temps et de les renvoyer comme une liste.

Comment le mot clé de rendement Travaillez dans Python?

Le mot clé de rendement dans Python est utilisé dans une fonction avec une boucle pour créer un itérateur. Lorsque la fonction est appelée, il renvoie un itérateur, mais ne démarre pas immédiatement l'exécution. Lorsque la méthode NEXT () de l'Iterator est appelée, la fonction commence à s'exécuter. Une fois qu'il rencontre le mot clé de rendement, il renvoie l'argument adopté pour rendre et pause l'exécution. La fonction peut être reproduite à partir de l'endroit où elle s'était arrêtée en appelant à nouveau (), permettant à la fonction de produire une série de valeurs au fil du temps, en se comportant comme un générateur.

Pouvez-vous fournir un exemple d'utilisation du mot clé de rendement Dans python?

Bien sûr, voici un exemple simple d'utilisation du mot clé de rendement dans python:

def simple_generator ():
rendement 1
rendement 2
rendement 3

pour la valeur dans Simple_Generator ():
print (valeur)

Dans cet exemple, Simple_Generator est une fonction de générateur car il utilise le mot clé de rendement. Lorsque nous itérons sur l'objet générateur renvoyé par Simple_Generator (), il donne 1, puis 2, puis 3, en pause son exécution entre chaque rendement.

Quels sont les avantages de l'utilisation du mot-clé de rendement en python?

Le mot clé de rendement dans Python vous permet d'écrire des fonctions qui peuvent produire une séquence de résultats au fil du temps, plutôt que de les calculer en même temps et de les renvoyer dans une liste par exemple. Cela peut être particulièrement utile lorsque le jeu de résultats est grand et que vous souhaitez enregistrer la mémoire. Il vous permet également de créer vos propres objets iTables et de les utiliser avec Python pour les boucles, les compréhensions et d'autres fonctions qui s'attendent à un itérable.

Une fonction peut-elle contenir à la fois des instructions de rendement et de retour dans python?

Oui, une fonction dans Python peut contenir à la fois des instructions de rendement et de retour. Cependant, il est important de noter qu'une fois une instruction de retour exécutée, l'exécution de la fonction est terminée et le contrôle est ramené à l'appelant. Donc, si une déclaration de retour est exécutée avant une déclaration de rendement, l'instruction de rendement ne sera jamais atteinte. Inversement, si une instruction de rendement est exécutée en premier, la fonction sera interrompue et que le contrôle sera ramené à l'appelant, mais la fonction peut être reproduite plus tard, à quel point l'instruction de retour peut être exécutée.

Puis-je utiliser le mot clé de rendement dans une fonction récursive dans Python?

Oui, vous pouvez utiliser le mot clé de rendement dans une fonction récursive dans Python. Cependant, vous devez vous rappeler d'itérer sur l'appel récursif et de produire chaque valeur, sinon vous obtiendrez un objet générateur au lieu des valeurs que vous attendez.

Quelle est la différence entre une fonction de générateur et une fonction normale Dans Python?

La principale différence entre une fonction de générateur et une fonction normale dans Python est qu'une fonction de générateur utilise le mot clé de rendement et qu'une fonction normale utilise le mot clé de retour. Lorsqu'une fonction de générateur est appelée, il renvoie un objet générateur sans même commencer l'exécution de la fonction. Lorsque la méthode suivante () est appelée pour la première fois, la fonction commence à s'exécuter jusqu'à ce qu'elle atteigne le mot clé de rendement, qui produit une valeur. La fonction réduit ensuite l'exécution et le contrôle est transmis à l'appelant. D'un autre côté, lorsqu'une fonction normale est appelée, elle démarre l'exécution immédiatement et s'exécute jusqu'à la fin, renvoyant une valeur.

Puis-je utiliser plusieurs instructions de rendement dans une seule fonction dans Python?

Oui, vous pouvez utiliser plusieurs instructions de rendement dans une seule fonction dans Python. Lorsque la fonction est appelée, elle donnera une valeur à chaque fois qu'elle rencontre une instruction de rendement, en pause son exécution et en passant le contrôle à l'appelant. La prochaine fois que la méthode Next () de la fonction sera appelée, elle reprendra l'exécution d'où elle s'était arrêtée et s'exécutera jusqu'à ce qu'elle rencontre l'instruction de rendement suivante.

Comment puis-je attraper l'exception de l'arrêt soulevée par une fonction de générateur dans Python?

Lorsqu'une fonction de générateur dans Python n'a plus de valeurs à céder, il soulève une exception d'architerie. Vous pouvez attraper cette exception en utilisant un bloc d'essai / sauf. Voici un exemple:

def simple_generator ():
rendement 1
rendement 2
rendement 3

gen = simple_generator ()

tandis que vrai:
essayez:
imprimer (suivant (gen))
sauf l'arrêt:
casser

Dans cet exemple, nous attrapons l'exception de l'arrêt et la rupture de la boucle lorsqu'il n'y a pas Plus de valeurs à céder.

Puis-je utiliser le mot clé de rendement dans une fonction lambda dans Python?

Non, vous ne pouvez pas utiliser le mot clé de rendement dans une fonction lambda dans Python. En effet, les fonctions Lambda sont limitées à une seule expression, et le mot-clé de rendement introduit un contexte d'instruction. Si vous devez créer une fonction de générateur, vous devrez utiliser une instruction DEF pour définir une fonction normale.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal