00:00Deze video gaat het hebben over de nieuwe mogelijkheid van positional-only argumenten. Ik laat je beginnen met een voorbeeld. Ik wil deze video beginnen met het praten over een ingebouwde functie genaamd float().

00:09float() kan worden gebruikt om tekst strings of getallen om te zetten in float objecten, zoals dit. Als u de help() functie oproept op de ingebouwde functie float, en u kijkt naar de handtekening voor float hier, dan ziet u dat er een schuine streep (/) achter de parameter staat. Wat betekent dat? Nou, het blijkt dat er één parameter is van float() en die heet x, en het is niet toegestaan om de naam van de parameter te gebruiken bij het aanroepen. Wanneer u float() gebruikt, mag u argumenten alleen specificeren door positie, niet door een sleutelwoord. Ik zal u laten zien wat ik bedoel. Dus nogmaals, let op de schuine streep (/) hier. Door q in te drukken, komt u uit help(). Dus als u float() nog eens probeert en x="3.8" zegt, een tekststring, dan ziet u hier dat er float() takes no keyword arguments staat, alleen dit positionele argument.

00:53U kunt geen trefwoord gebruiken als u het argument specificeert. Voor Python 3.8, was er geen gemakkelijke manier om te specificeren dat argumenten alleen positioneel mogen zijn in je eigen functies. Dus als je iets als deze functie zou definiëren-we noemen het incr() (increment).

01:10Wanneer je incr() aanroept, en laten we zeggen dat je het een float geeft, kun je elke methode gebruiken, en dat is normaal voor een gewoon argument. En dat is waar de verandering komt in Python 3.8.

01:24Je zou de functie increment incr() kunnen herschrijven om alleen positionele argumenten te accepteren. Het zou er dan meer zo uitzien, met een komma (,) dan een schuine streep (/), en de rest is hetzelfde.

01:40Dus als je incr() aanroept, werkt dat prima. Maar als je nu het sleutelwoord zou gebruiken, gebeurt er iets nieuws. Er staat hier incr() got some positional-only arguments passed as keyword arguments.

01:55Dus dat zal een uitzondering oproepen en je een TypeError geven. Je kunt dit bijna gebruiken als een scheiding tussen je positionele-alleen argumenten en gewone argumenten. Laat me je dat laten uitproberen met een ander voorbeeld.

02:07Define a new function named greet(). greet() gaat een name nemen als een positioneel-only argument, dan ga je die schuine streep (/) erin zetten, zodat je positionele-only met gewone argumenten kunt combineren. Dus hier is een regulier argument van een greeting.

02:23Hier ga je een f-string teruggeven met de greeting. Als je nog niet met f-strings hebt gewerkt, zal ik in de tekst hieronder een link opnemen naar artikelen en cursussen hierover.

02:31Comma, spatie, de name. Dus wanneer u greet() oproept – nogmaals, de standaard greeting wordt "Hello".

02:37U voert hier de name in als een positional-only.

02:43Groot. Je zou ook greet()

02:49 kunnen oproepen en het een greeting kunnen geven.

02:55Maar wat je niet kunt doen – of wat je een fout zal geven – is als je name typt,

03:08hier krijg je een exception van een TypeError. Opnieuw, net als bij de vorige voor incr(), kreeg greet() enkele positionele-alleen argumenten doorgegeven als sleutelwoord argumenten, specifiek name. Op het eerste gezicht kunnen positionele argumenten een beetje beperkend lijken en in strijd met Python’s mantra over het belang van leesbaarheid.

03:26Je zult waarschijnlijk merken dat er niet veel gelegenheden zijn waar positionele-only argumenten je code verbeteren. In de juiste omstandigheden kan het je echter wat flexibiliteit geven bij het ontwerpen van functies.

03:35 Ten eerste zijn positionele-only argumenten zinvol wanneer je argumenten hebt die een natuurlijke volgorde hebben, maar moeilijk zijn om goede beschrijvende namen aan te geven. Een ander voordeel van het gebruik van positional-only argumenten is dat je je functies gemakkelijker kunt refactoren – je kunt de naam van je parameters veranderen zonder je zorgen te maken dat andere code van die namen afhankelijk is.

03:57Om die informatie te herhalen, hoe geef je positional-only argumenten aan? U gebruikt de schuine streep (/) om aan te geven dat argumenten ervoor moeten worden gespecificeerd door positie. Om meer te leren over de slash-notatie, PEP 457 geeft er een diepgaande discussie over. PEP 570 gaat veel dieper in op Python positional-only parameters. Links naar beide staan in de tekst onder deze video.

04:20De aanvulling op positional-only argumenten zouden keyword-only argumenten zijn, en die zijn beschikbaar in elke versie van Python 3. Je kunt aangeven dat je alleen trefwoord-argumenten wilt door een sterretje (*) te gebruiken.

04:31Alle argumenten na die * moeten worden opgegeven door een trefwoord te gebruiken. Hier is een voorbeeld dat omrekent naar Fahrenheit, en u kunt hier zien dat het een sleutelwoord-alleen argument heeft van celsius.

04:46Laat me u deze functie uitproberen. Dus hier, om sleutelwoord-only te specificeren, zet je een * en dan zet je het sleutelwoord argument na-in dit geval, celsius. En in dit geval, return

05:0232 + celsius * 9 / 5. Dus hier, als u to_fahrenheit() zou oproepen en alleen een waarde zou geven, bijvoorbeeld 40 graden Celsius, staat hier dat het takes 0 positional arguments but 1 was given.

05:16Dus het vereist dat u een sleutelwoord daar hebt om het goed te kunnen oproepen. En ook, afhankelijk van je omstandigheden, wil je misschien positionele, gewone en sleutelwoord-argumenten combineren. Om dat te doen, zou u ze moeten specificeren gescheiden door die schuine streep (/) en de asterisk (*).

05:35Dus het zou er ongeveer zo uitzien. Hier, een positional-only van text, de schuine streep (/). Hier, het standaard argument.

05:46En nu, na de border, met behulp van de *, het keyword-only argument van width, dat een standaard waarde heeft van 50.

05:54U stuurt een f-string terug met een spatie voor de waarde van het text argument en dan nog een spatie. En dan gebruik je de text string methode van .center() met twee parameters die je uit die argumenten haalt, width en border.

06:08De enige die positioneel is, is text. Je zou kunnen beginnen met headline() en zeggen "Positional-only".

06:18Hier zie je de standaardwaarde die dat type rand gaat worden met een width van 50, die er ongeveer zo uitziet. Nogmaals, omdat het alleen positioneel is, als u het text,

06:35 zou geven, zou dat een fout geven, een TypeError. Voor border, is het een gewoon argument. Dus in dit geval kunt u gewoon een waarde opgeven, bijvoorbeeld het gelijkheidsteken ("=").

06:49Of u kunt opgeven dat border gelijk is aan bijvoorbeeld een dubbele punt (:). Het zal beide stijlen accepteren. Maar de width moet worden opgegeven met behulp van een trefwoord als je gaat om het in te voeren …

07:07overriding de standaard met een waarde van 38.

07:15Als je het zou geven gewoon de waarde van 38, dat zou weer een uitzondering, het krijgen van een TypeError: headline() takes 1 to 2 positional arguments but 3 were given. Dus nogmaals, dat moet een trefwoord-argument zijn.

07:29Zoals je kunt zien, kunnen positional-only argumenten een mooie aanvulling zijn op reguliere argumenten en keyword-only argumenten. In de volgende video leer je hoe Python 3.8 de type-controle verbetert door preciezere types te gebruiken.

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd.