Iteratormetoder
Hvert iteratorobjekt indeholder følgende to metoder.
- _ _iter_ _ ()
Denne metode bruges til at initialisere det iterable objekt. Det returnerede objekt har metoden '_ _Næste_ _()i Python 3.
- _ _Næste_ _()
Denne metode returnerer den næste værdi af det iterable objekt. Forholdet mellem iteratoren og det iterable objekt er vist i det følgende diagram.
Itererer med sløjfer
Det blev nævnt tidligere, at 'til'loop kalder'Næste()'metode implicit, når det gentager et iterabelt objekt. Når en sløjfe bruges til at gentage en iterabel genstand,til'loop kalder'Næste()'metode implicit og'mens'loop kalder'Næste()'eller'__Næste__()'metode eksplicit at læse den næste værdi af det iterable objekt. Begge typer sløjfe fortsætter med at kalde denne metode indtil 'StopIteration'signalet genereres.
Eksempel 1: Iterering af gentagelige objekter med 'for' Loop
Følgende script viser brugen af 'tilsløjfer til iterering af fem forskellige iterable objekter. Den første 'til'loop bruges til at gentage strengværdien og udskrive hvert tegn i strengen i hver iteration. Sekundet 'til'loop bruges til at gentage indholdet af en eksisterende tekstfil og udskrive hver linje i filen i hver iteration. Den tredje 'til'loop bruges til at gentage værdierne af en tuple. Den fjerde 'til'loop bruges til at gentage værdierne i en liste. Den femte 'til'loop bruges til at gentage værdierne i en ordbog.
# Iterering af en streng ved hjælp af for loopprint ("Strengteration ved hjælp af loop")
str = "Python"
for val in str:
print (val)
# Iterering af en eksisterende fil ved hjælp af for loop
print ("\ n \ nLæse en fil linje for linje ved hjælp af for loop")
for linje i åben ("test.txt "):
print (line, end = "")
# # Iterering af en tuple ved hjælp af for loop
udskriv ("\ n \ nToblet gentagelse ved hjælp af for loop")
tup = ("Bog", "Papir", "Blyant", "Pen")
til val in tup:
print (val)
# Iterering af en liste ved hjælp af for loop
udskriv ("\ n \ nListeteration ved hjælp af for loop")
listdata = ["Designer", "Analyst", "Programmer", "Administrator"]
for val i listdata:
print (val)
# Iterering af en ordbog ved hjælp af for loop
udskriv ("\ n \ n Ordbog Iteration ved hjælp af for loop")
dictval = 'Meher': 95, 'Sakib': 97, 'Akhi': 70, 'Fiaz': 78
til indeks i dictval:
udskriv ("% s opnåede% d mærker"% (indeks, dictval [indeks]))
Produktion
Følgende output viser, at tegnene i strengværdien; linjerne i prøve.txt fil; og emnerne i tuplerne, listen og ordbogen udskrives efter kørsel af scriptet.
Eksempel 2: Iterering af lister med 'while' Loop
Følgende script viser brugen af en 'mens'loop til iterering af en liste med data. Her er 'iter ()'metode bruges til at initialisere det iterable objekt, og'Næste()'metode bruges til at læse den næste værdi af det iterable objekt. StopIteration signal bruges til at afslutte fra det uendelige 'mens' loop, når der ikke er noget punkt på listen tilbage til læsning.
# Definer en listelistdata = ['google.com ',' bing.com ',' yahoo.com ',' baidu.com ',' duckduckgo.com ']
# Initialiser det iterable objekt
init_iter_object = iter (listdata)
udskriv ("Iterating List data using while loop: \ n")
# Erklær og uendelig mens loop
mens det er sandt:
prøve:
# næste () metode bruges til at gentage næste værdi
værdi = næste (init_iter_object)
print (værdi)
undtagen StopIteration:
# Afslut fra sløjfen efter iterering af alle værdier
pause
Produktion
Følgende output viser, at hver værdi på listen er blevet udskrevet i hver linje ved hjælp af 'Næste()'metode efter kørsel af scriptet.
Eksempel 3: Iteration a Tuple with '__next __ ()' Method and 'while' Loop
I det følgende script, begge 'Næste()'og'__Næste__()'metoder bruges til at gentage værdierne af en tuple. Det 'iter ()'metode bruges til at oprette det iterable objekt med navnet'init_iter.'Her, den'Næste()'metode kaldes to gange for at udskrive de to første værdier i tuplen. Dernæst en uendelig 'mens'loop bruges til at gentage de resterende værdier af tuplen og'StopIteration'signal bruges til at afslutte fra sløjfen, som i det foregående eksempel.
# definer en tupleanimal_tuple = ('Fugl', 'Løve', 'Abe', 'Slange', 'Elefant')
print ("Værdierne for tuplen er: \ n")
# Initialiser et iteratorobjekt ved hjælp af iter ()
init_iter = iter (animal_tuple)
# iterér og udskriv værdien ved hjælp af næste () metode
udskriv (næste (init_iter))
udskriv (næste (init_iter))
# Definer en uendelig mens løkke
mens det er sandt:
prøve:
# gentag og udskriv værdien ved hjælp af __next __ () -metoden
udskrive (init_iter.__Næste__())
undtagen StopIteration:
# Afslut fra sløjfen efter iterering af alle værdier
pause
Produktion
Følgende output viser, at de to første værdier efter kørsel af scriptet, 'Fugl'og'Løve,'er trykt med'Næste()'metode, mens de andre tre værdier,'Abe,"Slange,'og'Elefant,'er trykt med'__Næste__()'metode.
Iterering med en brugerdefineret Iterator
Dette afsnit viser, hvordan forskellige typer tilpassede iteratorer kan implementeres ved at oprette klasser. Både '__iter __ ()' og '__Næste__()'metoder vil blive implementeret i en klasse, og'mens'loop bruges til at gentage værdierne for det iterable objekt. Den næste del af denne artikel viser også, hvordan man opretter en uendelig brugerdefineret iterator og styrer iterationen.
Eksempel 4: Brug af en simpel brugerdefineret Iterator
Følgende script giver dig mulighed for at beregne værdien af xn ved at bruge en brugerdefineret iterator uden at bruge nogen indbygget funktion af Python. Klassen ved navn 'x_to_the_power_n'erklæres i scriptet. Det '__i det__()'metode i klassen initialiserer værdierne for x og n der vil blive brugt på tidspunktet for oprettelse af objekt. Det '__iter __ ()'metoden initialiserer klassevariablen, som gemmer'resultat'variabel af beregningen i hver iteration. Værdierne af x og n vil blive taget som input fra brugeren. Et objekt i klassen 'numre'er oprettet med x og n. Dernæst et iterabelt objekt med navnet 'iter_obj'er skabt til at kalde'__Næste__()'metode til n-1 gange ved hjælp af 'mens'loop for at beregne værdien af xn. I hver iteration er værdien af x ganges med den tidligere værdi af 'resultatvariabel. Efter afslutning af 'mens'løkke, den'__Næste__()'metode kaldes igen for at udskrive værdien af xn.
"Opret en klasse for at beregnex til magten n ved hjælp af iterator
"
klasse x_to_the_power_n:
# Initialiser værdien af x og n
def __init __ (selv, x = 0, n = 0):
selv.x = x
selv.n = n
# Initialer iterablen
def __iter __ (selv):
selv.resultat = 1
vende tilbage selv
# Beregn værdien i hver iteration
def __næste __ (selv):
hvis selv.n> = 0:
selv.resultat * = selv.x
selv.n - = 1
vende tilbage selv.resultat
# Tag værdierne x og n
x = int (input ("Indtast værdien af x:"))
n = int (input ("Indtast værdien af n:"))
# Opret et objekt fra klassen
tal = x_to_the_power_n (x, n)
# Opret en iterabel
iter_obj = iter (tal)
prøve:
i = 0
mens jeg < n-1):
# Gendan den næste værdi ved hjælp af næste () -metoden
næste (iter_obj)
i + = 1
udskriv ("\ n% d til magt% d er% d"% (x, n, iter_obj.__Næste__()))
undtagen StopIteration:
# Afslut fra scriptet, hvis der ikke findes nogen værdi
udskriv (næste (iter_obj))
Produktion
Følgende output viser det 2 tages som værdien af x og 4 tages som værdien af n. Så, scriptet beregnet værdien af 24 at være 16.
Eksempel 5: Brug af en uendelig brugerdefineret Iterator
Det følgende script udskriver løbende de numre, der kan deles med 5 med en forsinkelse på et sekund, indtil brugeren trykker på Ctrl + c at generere 'KeyboardInterrupt'signal. Det uendelige 'mens'loop bruges her til at oprette en uendelig brugerdefineret iterator. Det 'tid'modul importeres i begyndelsen af scriptet for at bruge'søvn()'metode til at forsinke hvert output i et sekund. Nummeret 5 initialiseres til 'antal'variabel som det første delelige nummer i scriptet, og det næste nummer genereres ved at tilføje 5 med den tidligere værdi af'antalvariabel.
# Importer tidsmodulimporttid
"
Opret en klasse for at generere numrene
som kontinuerligt kan deles med 5
"
klasse Number_Divisible_by_five:
# Initialiser værdien af num
def __iter __ (selv):
selv.num = 5
vende tilbage selv
# Beregn det næste tal, der kan deles med 5
def __næste __ (selv):
next_num = selv.antal
tid.sove (1)
selv.tal + = 5
returner næste_nummer
# Opret et objekt fra klassen
Objekt = Number_Divisible_by_five ()
# Opret iterabelt objekt
iterObject = iter (Objekt)
# Definer uendelig løkke
mens det er sandt:
prøve:
# Gå til næste iteration
udskrive (iterObject.__Næste__())
undtagen KeyboardInterrupt:
print ("Ctrl + C trykkes.")
# Afslut fra sløjfen, når der trykkes på Ctrl + C
pause
Produktion
Følgende output viser, at antallet begyndte at udskrive fra 5 og løbende udskrev de næste numre efter hinanden med et varighed på et sekund. Når brugeren trykkede Ctrl + c efter udskrivning af nummeret 60, beskeden 'Ctrl + C trykkes.blev udskrevet, inden manuskriptet blev afsluttet.
Eksempel 6: Styring af en brugerdefineret uendelig Iterator
Det følgende script viser, hvordan man stopper den brugerdefinerede uendelige iterator, når man har gennemført et specificeret antal iterationer. Det '__iter __ ()'metode i klassen initialiserer værdierne for'n'og'resultat'klasse variabler. Scriptet beregner kvadraterne på tallene fra og med 1, der er gemt i variablen n, og udskriv kvadratværdien af n indtil værdien af n er større end 5. En uendelig mens løkke er erklæret her for at kalde '__Næste__()'metode til at udskrive kvadratværdien af n. Når værdien af n når 6, det 'StopIteration'signal genereres for at afslutte sløjfen.
# Importer tidsmodulimporttid
"
Opret en klasse til beregning
kvadratet af nummeret starter fra 1 til
værdien af tallet er mindre end 6
"
klasse beregne_effekt:
# Initialiser værdien af num
def __iter __ (selv):
selv.n = 1
selv.resultat = 0
vende tilbage selv
# Beregn det næste tal, der kan deles med 5
def __næste __ (selv):
# Kontroller, at værdien af n er mindre end eller lig med 5 eller ej
hvis selv.n <= 5:
selv.resultat = selv.n ** 2
tid.sove (0.5)
selv.n + = 1
vende tilbage selv.resultat
andet:
hæve StopIteration
# Opret et objekt fra klassen
Objekt = beregne_kraft ()
# Opret iterabelt objekt
iterObject = iter (Objekt)
# Definer uendelig løkke
mens det er sandt:
prøve:
# Gå til den næste iteration og udskriv kvadratværdien
print ("Kvadraten på% d er% d"% (iterObject.n, iterObject.__Næste__()))
undtagen StopIteration:
print ("\ nTermineret fra sløjfen.")
# Afslut fra sløjfen
pause
Produktion
Følgende output viser, at den uendelige brugerdefinerede iterator blev afsluttet, når værdien af n blev større end 5. Scriptet beregnet og udskrev firkantværdierne for talværdierne fra 1 til 5.
Iterere med itværktøjer
Python har et indbygget modul med navnet 'itværktøjer'der kan bruges til at oprette en iterator til iterering af data ved hjælp af en loop. Det næste afsnit i denne artikel viser, hvordan du bruger tre funktioner i dette modul.
itværktøjer.tælle()
Det 'værktøjer.fortsat'funktion kan bruges med'kort()'metode til at generere sekventielle data og med'lynlås ()'metode til at tilføje sekvenser ved hjælp af optællingsparameteren for denne metode. Syntaksen for denne funktion er angivet nedenfor.
Syntaks
itværktøjer.tælle (start = 0, trin = 1)Her er den første parameter, 'Start,'bruges til at definere startværdien af sekvensen, og 0 er standardværdien for denne parameter. Den anden parameter, 'trin,'bruges til at indstille forskellen mellem de på hinanden følgende tal, og 1 er standardværdien for denne parameter.
Eksempel 7: Brug af tæller () Funktion for itværktøjer
Det følgende script beregner summen fra 0 til n tal, hvor værdien af n vil blive taget fra brugeren. Det 'tælle()'funktion importeres fra'itværktøjer'i begyndelsen af scriptet. Det 'min_iterator'objekt initialiseres med'tælle()'funktion, med en'Start'værdi på 0 og a'trin'værdi på 1. Dernæstsum_result'variabel initialiseres med den første værdi af det iterable objekt. Startværdien initialiseres til variablen jeg og startnummeret er gemt som tegnet i variablen, tal, der vil blive brugt til at kombinere andre tal i hver iteration. Værdierne for de løbende numre tilføjes i hver iteration, når 'Næste()'metode kaldes. Når værdien af jeg bliver større end n, scriptet afsluttes ved at vise resultatet af summen.
"Det følgende script beregnersummen af 0 til det antal, der tages som input.
"
# Importantal
fra itertools importantal
# Opretter et gentageligt objekt med optælling ()
my_iterator = antal (start = 0, trin = 1)
# Læs den første værdi fra iteratoren
sum_result = næste (min_iterator)
# Tag et talinput for at afslutte det uendelige mens loop
n = int (input ("Indtast grænseværdien:"))
# Initialiser værdien af i og tal
i = sum_result
tal = f 'i'
# Erklær uendelig løkke
mens det er sandt:
# Tilføj nummeret i hver iteration
sum_result + = i
i = næste (min_iterator)
# Afslut sløjfen, hvis værdien af i er mere end n
hvis (i> n):
pause
# Tilføj talværdien som en streng med '+' symbolet
tal + = "+" + f 'i'
# Udskriv den endelige værdi
udskriv ("% s =% d"% (tal, sum_result))
Produktion
Følgende output viser, at antallet 10 tages som det input, der bruges til at afslutte loop efter kørsel af scriptet. I denne output har scriptet beregnet summen fra 0 til 10 og udskrevet output, 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 = 55.
Itertools.cyklus()
Denne funktion indeholder kun et argument, som kan være et hvilket som helst objekt. Formålet med denne funktion er at gentage værdierne for objektet efter at have afsluttet iteration af alle værdier. Her strenge, tupler, lister osv. kan bruges som et objekt. Den iterable objektretur for denne funktion bruges til at gentage hver værdi af objektet, der skal bruges som et argument ved hjælp af 'Næste()'metode. Antallet af gange, som værdierne for det iterable objekt vil gentage, vil være baseret på antallet af iterationer af sløjfen. Syntaksen for denne funktion er angivet nedenfor.
Syntaks
itværktøjer.cyklus (objekt)Eksempel 8: Brug af cykel () -værktøjets funktion
Det 'tilfældig'og'itværktøjer'moduler importeres i starten af scriptet for at generere et tilfældigt tal og bruge'cyklus()'funktion fra'itværktøjer'modul til gentagelse af data. En liste med tre tilfældige tal bruges som argument for 'cyklus()'funktion. Det gentagne objekt med navnet 'num_liste'initialiseres med returværdien af denne funktion. Det 'tælle'variabel initialiseres til 0, og når værdien af denne variabel bliver 6, det 'mens'loop slutter. Så 'mens'loop gentages seks gange, og hver værdi på listen gentages kun en gang.
# Importer tilfældigt modulimport tilfældigt
# Importer itertools-modul
importere itværktøjer
# Generer et iterabelt objekt baseret på listen over tre tilfældige tal
num_list = itværktøjer.cyklus ([tilfældig.randint (1,5), tilfældig.randint (10,50), tilfældig.randint
(100.500)])
# Initialiser tælleren
tælle = 0
# Iterer sløjfen 6 gange
mens (tæl != 6):
print ('Det aktuelle tilfældige tal er:' + f 'næste (num_list)')
tælle + = 1
Produktion
Følgende output viser, at tre tilfældige tal, 3, 17, og 185, er genereret som listeelementer. Loopen gentages seks gange, og disse tre værdier gentages for de næste iterationer.
Itertools.gentage()
Funktionen 'gentag ()' fungerer som en uendelig iterator og kan tage to argumenter. Når det andet argument udelades, fungerer funktionen 'gentag ()' som en uendelig iterator og gentager værdien et uendeligt antal gange. Denne funktion optager ikke hukommelse for hver gentagelse. Det opretter bare variablen en gang i hukommelsen og gentager den samme variabel et uendeligt antal gange, når der kun er indstillet et argument for denne funktion. Syntaksen for denne funktion er angivet nedenfor.
Syntaks
itværktøjer.gentag (værdi, grænse)Det første argument bruges til at tage den værdi, der gentages. Det andet argument er valgfrit og bruges til at indstille grænsen for gentagelser.
Eksempel 9: Brug af gentagelsesfunktionen () til itertools-modulet
Det 'itværktøjer'modul importeres i starten af scriptet for at bruge'gentage()'funktion. En strengværdi tages fra brugeren til gentagelse, og der tages en talværdi fra brugeren for at indstille gentagelsesgrænsen. Returneringsværdien af 'gentage()'funktion konverteres derefter til en liste med'liste()'metode og gemt i'listeDatavariabel. Værdierne af 'listeData'udskrives med'tilløkke.
# Importer itertools-modulimportere itværktøjer
# Tag den inputværdi, der gentages
string = input ("Indtast en streng:")
# Tag nummerværdien for at gentage
gentag = int (input ("Indtast det nummer, der skal gentages:"))
# ved hjælp af repeat () for gentagne gange at tilføje strengen på en liste
listData = liste (itværktøjer.gentag (streng, gentag))
# Initialiser i
i = 1
print ("Listeværdierne er: \ n")
# Iterer listen ved hjælp af for loop
for val in listData:
udskriv ("Listeelement% d =% s"% (i, val))
i + = 1
Produktion
Følgende output viser, at 'Python'tages som strengværdien, og 3 tages som det nummer, der bruges til at gentage strengværdien efter kørsel af scriptet. Outputtet viser, at strengen 'Pythongentages tre gange.
Konklusion
Begrebet iterator og anvendelsen af forskellige typer iteratorer i Python forsøges at forklare med de meget enkle eksempler i denne artikel. Python-brugere kan bruge en indbygget iterator eller kan oprette deres brugerdefinerede iterator baseret på kravet. Denne artikel hjælper python-brugerne med at vide om metoderne, der bruges i iteratoren, og hvordan disse metoder fungerer med enhver loop for at læse ethvert iterabelt objekt. Nogle anvendelser af itværktøjer modul af python er også forklaret i denne artikel for at kende flere detaljer om iteratoren i python.