Uit de cursus: Training over basisprincipes van Python
Terwijl - tutorial Python
Uit de cursus: Training over basisprincipes van Python
Terwijl
- Hoewel loops er onschuldig uitzien, zijn ze een van de gevaarlijkste dingen die je in Python kunt schrijven. Eén klein foutje en je programma blijft voor altijd draaien. Toegegeven, sommige programma's willen we voor altijd uitvoeren, zoals een webservice, maar uw programma kan voor altijd draaien en niet op een goede manier. Maar wees niet bang, terwijl je hier bent, leer je geavanceerde while loop control-statements om deze wilde beesten te temmen. Laten we naar de code gaan. Een ding dat ik graag gebruik om te testen tijdens loops is de Python datetime-klasse, van datetime-import datetime. Oké, we zouden wat getallen in onze while-lus kunnen verhogen om te controleren of we een bepaald getal al hebben bereikt, maar waarom zouden we daar niet gewoon een for-lus voor gebruiken? Het controleren van de werkelijke tijd is veel spannender en we kunnen de huidige datum en tijd krijgen door datetime.now() te bellen en als we alleen de seconden in de huidige minuut willen, kunnen we .second gebruiken zodat we 34 seconden in de huidige minuut zijn. Nu, als we twee seconden in de toekomst willen komen, tel er dan gewoon 2 bij op, maar je moet hier voorzichtig mee zijn. Want laten we zeggen dat we momenteel op 59 seconden zitten, het is op een seconde in de volgende minuut, dus we moeten modulus 60 gebruiken om dat weer te geven. Dus, hier is waarom we dit allemaal doen, laten we een eenvoudige while-lus maken die twee seconden wacht en vervolgens een bericht afdrukt, wait_until gelijk is aan twee seconden in de toekomst terwijl datetime.now().second ! = wait_until: print ('Nog steeds in behandeling.') Ten slotte verlaten we onze while-lus en drukken we "We zijn op {wait_until} seconden!" Oké, als we dit nu uitvoeren, vult het heel snel ons scherm. Dus Python is erg snel, laat me deze cel wissen. Oké, dus wat doen we in deze situatie? Welnu, als we de printinstructie verwijderen, krijgen we een syntaxisfout. Je moet iets ingesprongen hebben onder de while-lus. Wat we zouden kunnen doen, is misschien wat nutteloze berekeningen maken. Dit werkt, maar het is naar mijn mening een vreselijke verspilling van rekenkracht. Een ding dat we echter kunnen gebruiken, is de pasverklaring. (instructeur typt) Daar gaan we en wat deze verklaring uit het verleden zegt, is dat er hier niets te zien is, maar het behoudt wel kritisch onze inspringing. Het is ook geweldig om als tijdelijke aanduiding te gebruiken, bijvoorbeeld als je een functie of een klassedefinitie schrijft, maar je wilt deze nog niet invullen, je kunt gewoon pass schrijven. Laten we dus eens kijken naar een andere manier om dit te schrijven met behulp van de pauzeverklaring. Dus ik ga wait_until gebruiken, en dan ga ik zeggen terwijl True: oké, dus eerlijk, mijn hart slaat een slag over als ik zie terwijl True: in iemands code, maar in dit geval is het veilig, we gaan het veilig gebruiken. Als datetime.now().second = wait_until: breek nu, laat me dit onder de pauze-instructie daarheen verplaatsen. Oké, dus het wacht twee seconden en wordt dan afgedrukt. Dus wat de break-instructie doet, is uit de huidige lus breken waarin het zich bevindt. Je kunt dit zien als de lijnen opgaan en zeggen: is dit een lus? Nee, het is een als-verklaring. Is dit een lus? Ja, het is een while-lus, dus het verlaat de huidige while-lus, ook al staat er while True: Merk op dat de break-instructie alleen uit de eerste lus breekt waarin het zich bevindt. Dus als ik dit doe en het ook verander in een while-lus, wacht het twee seconden, drukt we af op 11 seconden... Oeps, en het loopt nog steeds. Je kunt daar het sterretje zien dat aangeeft dat het nog steeds actief is. Dus het zal voor altijd blijven lopen, het breekt hier nooit uit, terwijl het waar is: En elke keer dat de seconden 11 seconden bereiken, wordt dit bericht gewoon een hele seconde afgedrukt. Dus laat me hiermee stoppen en ik ga de celuitvoer weer wissen. Oké, en de laatste controleverklaring voor, voor lussen, Doorgaan. Ga door, sla alle regels over die erop volgen in de while-lus. Dus als ik deze originele code hierheen breng, breng hem dan naar beneden... Ik ga daar gewoon een doorgaande verklaring plaatsen en je kunt zien dat deze regel nooit wordt afgedrukt. Dus ga gewoon door, sla al het andere over dat erop volgt in deze while-lus. Nu zouden we dit hele ding natuurlijk kunnen vervangen door een pas en het zou precies hetzelfde en een beetje schoner zijn. Dus meestal zie je een continue instructie die wordt gebruikt in een if-instructie om te voorkomen dat de rest van de code in de lus wordt uitgevoerd, maar alleen als aan een voorwaarde is voldaan. Dus laten we dit gewoon kopiëren, verander de while in True: opnieuw, En dan hier ga ik zeggen of datetime.now().second minder is dan wait_until: blijf dit veranderen om te breken. Oké, dus wanneer deze continue-instructie wordt geraakt, wordt al het andere in de lus overgeslagen, wat gewoon deze pauze-instructie is. En zodra deze, als de bewering niet langer waar is, dan wordt doorgaan niet langer geraakt, bereikt het daadwerkelijk de afbreekverklaring, waardoor deze buiten deze while-lus wordt verbroken. Vervolgens wordt afgedrukt "We zijn op {wait_until} seconden!" Natuurlijk is deze logica in principe hetzelfde als het plaatsen van deze controle in de while-lus zelf en vervolgens de while-lus na twee seconden verlaten. En dit is het grote geheim van doorgaan en pauzeren, ze zijn technisch niet logisch noodzakelijk, maar ze kunnen je helpen code te herschikken en duidelijker te schrijven voor andere programmeurs om te lezen. Het is dus belangrijk om ze te begrijpen en klaar te zijn om ze uit te halen, afhankelijk van de situatie.
Oefen terwijl u leert met oefenbestanden
Download de bestanden die de cursusleider gebruikt tijdens de cursus. Volg de stappen en leer door te kijken, te luisteren en te oefenen.