Hvad er forskellen mellem udbytte og afkast i python?


Svar 1:

Udbytte

  • En udbytteopgave i en funktion gør funktionen til en generatorfunktion, der kan bruges i en løkke. Når funktionen kører, og udbyttet udføres, føres værdien efter udbyttet tilbage til den loop, der kaldte den. Næste gang løkken itererer, starter funktionen straks efter udbytteangivelserne. For eksempel udskriver denne løkke (linjer 6 til 7) værdierne 1 til 3
def func ():
udbytte 1
udbytte 2
udbytte 3

for num in func ():
print (num)

Den løkke, der påberåber sig funktionen, afsluttes, når func afsluttes - enten opfylder slutningen af ​​funktionen, eller en returnering.

Enhver ny løkke, der bruger den samme generatorfunktion, udfører funktionen fra starten igen.

Vend tilbage

  • En return-erklæring bruges til at stoppe udførelsen af ​​en funktion og eventuelt returnere en værdi til den, der ringer. En funktion, der har et afkast (men ikke et udbytte), kan ikke bruges i en løkke (i modsætning til ovenstående). Hvis en funktion, der tidligere er udført kaldes igen, begynder funktionen udførelse fra starten (i modsætning til udbyttet ovenfor).

Begge i én funktion

Der er ingen regler for at bruge udbytte og afkast i funktionen, men i dette tilfælde fungerer funktionen som en generatorfunktion; dvs. det fungerer som om det påberåbes fra en løkke. Hvis funktionen når retur, afslutter opkaldssløjfen, og enhver returneringsværdi ignoreres.


Svar 2:

Forestil dig en funktion, der skal være et rum. Forestil dig nu, at du kom ind i dette rum og øgede en tæller, der var initialiseret til 0. Værdien af ​​tælleren er i øjeblikket 1. Nu kommer du ud af rummet tilbage til den position, hvorfra du var kommet ind i rummet (sig, din hoved) . Hvis du bliver bedt om at vende tilbage til rummet, afhænger værdien af ​​tælleren af, hvordan du var kommet ud af rummet. Havde du vendt tilbage fra rummet eller givet dig fra rummet.

  • Hvis du var vendt tilbage fra rummet, vil værdien af ​​tælleren være 0.Hvis du havde afgivet fra rummet, vil tællerens værdi være 1.

return går grundlæggende fra en funktion med en værdi, og de lokale værdier inden for ødelægges.

udbytte er slags udgang fra funktionen, men den husker staten, da du var forladt fra. Hvis du nu gør et næste fra din hoved, begynder du fra det punkt, hvor du var kommet efter.

def func1 ():
  a = 0
  mens sandt:
  a + = 1
returnere a

def func2 ():
a = 0
mens sandt:
a + = 1
udbytte a

f1 = func1 ()
f2 = func2 ()
for jeg inden for rækkevidde (5):
  retur = f1
  udbytte = næste (f2)

Her vender returværdien altid tilbage 1. På den anden side vil udbytterne være fra 1 til 5.

Hvorfor skulle du bruge et udbytte ... næste nøgleord?

Disse sæt nøgleord bruges til at oprette en generatorfunktion. Forestil dig, at func1 og func2 giver dig en liste med 10.000 objekter. 10.000 objekter optager så meget mængde hukommelse, og der kan være scenarier, hvor du ikke rigtig kræver, at 10.000 objekter holdes samtidig i hukommelsen (en linje fra fil, som du behandler sekventielt).

I disse tilfælde kan du give en værdi, så du kun har et enkelt objekt i hukommelsen.

En pænere måde at bruge en generatorfunktion (i stedet for den næste) ville være:

def func3 ():
for jeg inden for rækkevidde (5):
udbytte i

for f in func3 ():
tryk (f)

Dette udskriver dig værdier fra 0 til 4.