José: Hallo welkom terug.
In deze lezing hebben we het over filter.
Nu we onze
generatoren, iterators en iterables uit de weg
hebben, kunnen we beginnen met enkele leuke ingebouwde functies.
De filterfunctie is een ingebouwde functie in
Python die je vanuit elk bestand of programma kunt aanroepen, dat
is wat ingebouwd betekent en er
zijn twee argumenten voor nodig.
Het eerste argument voor de filterfunctie
is een andere
functie en er is ook een iterabel voor nodig.
Dus het gaat ongeveer als
volgt, laten we een vriendenlijst
zoeken zoals Rolf, Jose, Randy, Anna en Mary en ik weet dat ik er
een heb gemist.
En nu gaan
we de filterfunctie gebruiken zodat we alleen de vrienden krijgen
die beginnen met de letter R.
Dus, begin met R, wordt
filter, dit is de functie, nu is
een functie eerste argument
nodig, arg 1, functie die waar of onwaar teruggeeft.
Dus het eerste argument voor deze filterfunctie
moet een andere functie zijn die waar of onwaar
retourneert, afhankelijk van wat we willen filteren.
Dus laat me hier een functie definiëren.
Begint met R
Retour vriend punt beginnen met R.
Friend dot begint met R zal waar zijn als dit
argument hier begint met een R, het zal onwaar zijn als
dat niet het geval is.
Dus het eerste argument voor de filterfunctie moet zijn
dat dit begint
met de R-functie en het
tweede argument moet een iterabel zijn, we weten
wat dit zijn, dus vrienden is een itereerbaar
omdat we erover kunnen herhalen, het
is een lijst en dat is het, dit is hoe
de filterfunctie eruit ziet en wat het doet
is dat het alleen de elementen behoudt waarvoor dit waar is.
Dus de eerste keer
dat de filterfunctie doorloopt, krijg je Rolf, Rolf gaat
naar de vrienden, vriend begint
met R, het wordt waar,
dus Rolf wordt behouden door de filterfunctie.
Dan gaat het weer, en deze keer met Jose,
Jose begint met R is onwaar, dus
filter zal het verwijderen en negeren
enzovoort voor elke vriend hier.
Het interessante is dat filter eigenlijk
een generator retourneert, zodat
het een
beetje efficiënter is, in
plaats van je lijst te kopiëren met
alleen de elementen die je wilt behouden, moet je de volgende aanroepen, begin
met R-element zodat je de volgende beschikbaar krijgt element dat in
dit geval Rolf zal zijn.
En als je dat keer op keer doet, krijg
je
Randy en uiteindelijk krijg je deze stop-iteratie-uitzondering waar we eerder over
spraken, wat het
einde aangeeft van een reeks of
een generator of een
iterator wanneer je de einde van het, oké?
Wanneer u een for-lus doet,
roept de for-lus op
de achtergrond gewoon de volgende oproep aan en
zodra u deze stop-iteratie bereikt, stopt
de for-lus en
krijgt u deze fout niet omdat
de stop-iteratie is ontworpen om dat te
bedoelen en de for-lus is een constructie die
stop-iteratie gebruikt om te weten wanneer het einde is bereikt, oké?
Nu, natuurlijk, als je een lijst met begin maakt met R, dan zal het
je een lijst geven van alle
elementen in de generator,
het gaat door elk element en het zal het
in een nieuwe lijst plaatsen.
Als je het nu nog een keer doet, wat
denk je dan dat er gaat gebeuren?
Welnu, je krijgt een lege lijst, het
lijstobject hier verhoogt geen stop-iteratie, maar het ziet dat de stop-iteratie wordt verhoogd
en het geeft je gewoon niets,
het geeft je
nu gewoon een lege lijst
omdat de generator is al gebruikt en
onthoudt dat het het einde heeft bereikt,
dus het kan je niets anders geven.
Dit is de reden waarom ik generatoren,
iterators en iterables uitleg voordat ik naar deze filterfunctie ga, oké?
In plaats van hier een functie te definiëren die een
parameter nodig heeft
en de parameter teruggeeft die begint met
R, kunnen we natuurlijk gewoon een lamda gebruiken.
Deze lamda-functie is precies hetzelfde, dus er
is één parameter voor nodig en na
de dubbele punt definiëren we wat het retourneert en wat
het retourneert is x punt begint met R, dus dit
is waar of onwaar,
afhankelijk van of x begint met R.
Als je je er beter door voelt,
kun je de parameter vriend bellen en op die manier
is het misschien wat
duidelijker dat deze functie misschien op
deze vrienden hier gaat werken,
dan heb je die functie daar niet meer nodig.
En we hebben deze opmerking ook niet
meer nodig aangezien we nu weten wat het betekent.
Deze filterfunctie hier is
identiek
aan deze generatoruitdrukking hier, dit
generatorbegrip dat zegt, F
voor F in vrienden, als F-punt begint met R.
Dus deze twee zijn identiek, oké?
Hier hebben we een generatoruitdrukking, een generatorbegrip
dat elke vriend in een
nieuwe generator plaatst, maar alleen als F begint met R,
dus deze twee zijn hetzelfde, oké?
Welke is sneller?
Welke presteert beter?
Deze, generatorbegrip, presteert in dit geval
in ieder geval beter.
En de reden
daarvoor is dat je deze lamda-functie in dit filter
moet maken en je hoeft
geen lamda-functie in de generator-expressie te maken.
Als je je functie al ergens
anders in je programma hebt
gedefinieerd, kan de filterfunctie beter presteren en ook
in sommige gevallen denk
ik dat de filterfunctie leesbaarder kan zijn, hoewel ik in veel
andere gevallen denk
dat het begrip van de lijst beter leesbaar is.
Dus het is aan
jou welke je gebruikt, ik ga normaal gesproken voor het
begrip, het is ook een beetje meer Pythonisch.
Trouwens, voor de volledigheid, zodat
het precies duidelijk is wat er aan de
hand is, deze twee filters en het begrip van
deze generator zijn identiek aan deze
andere functie die ik ga definiëren.
Het is een andere
filterfunctie,
heel erg zoals deze die een
functie en een iterabel opneemt en de iterabele gaat herhalen,
het gaat controleren of de functie waar
retourneert of niet en het zal aan
het einde I opleveren als de
functie is waar.
Laten we ons dus voorstellen dat we hier mijn aangepaste filter noemen.
Lamda-vriend begint met R is
deze functie, de iterable is onze vriendenlijst.
We herhalen de iterabele, we krijgen het eerste element dat
Rolf is.
Als func I dat wil zeggen, vriend begint met R is
waar, wat het is, dan geven we
I op, dat is Rolf.
Als we de volgende keer bellen, halen we
Rolf en dan stoppen
we direct na lijn negen.
Als we de volgende
keer weer bellen, gaan we terug naar de
top, dat ben ik, we gaan, dat is
Jose trouwens, de
string Jose, we gaan controleren of de functie overeenkomt,
het wordt onwaar, dus we Als we niets opleveren, stoppen we
niet, we gaan naar het volgende element van de lus,
we controleren of Randy begint met R en
dat is zo, dus dan geven we Randy op en stoppen we.
De volgende keer dat we de volgende keer bellen,
gaan we hierheen en het is Anna, het is vals, dus we geven
niet toe, we gaan door, ik ben Mary, het is
vals, dus we geven niet toe, we gaan verder, we bereiken het
einde, dat is een stop iteratie zodat we het einde van
het generatorobject bereiken en dat is nog een stopiteratie die ons
vertelt dat we het einde hebben bereikt.
Dus hopelijk is dit logisch, het begint
een beetje meer te worden, meer in waar Python
over gaat, dit is het beheren van gegevens en het
verzenden van gegevens van de ene plaats naar
de andere en
de opbrengst is extreem
krachtig omdat je hiermee kunt stoppen en de waarden kunt
genereren één voor één zonder ze allemaal tegelijk
in het geheugen op te slaan.
Hoe dan ook, dat
was het voor deze video, ik wilde je deze filterfunctie laten
zien en hoe deze wordt gebruikt.
De filterfunctie
is ook aanwezig in
veel andere programmeertalen, dus je
zult het overal zien terwijl je je
programmeervaardigheden ontwikkelt en je programmeerreis voortzet.
En dus, ja, dat was het en ik
zie je in de volgende video.