Dit artikel zal de lezer helpen verder te gaan vanuit de vorige blog over Python-functies, samen met enkele basisapplicaties in de echte wereld. We zullen Visual Studio Code gebruiken als onze code-editor. Als je Visual Studio Code nog niet hebt geïnstalleerd, zijn de instructies te vinden in de eerste blog.
Geavanceerde functies in Python – inhoudsopgave:
- Functies doorgeven aan andere functies
- Functies gebruiken binnen een functie
- *Args in Python
- “*” operator in Python
- **kwargs in Python
Functies doorgeven aan andere functies
Zoals besproken in de vorige blog, worden functies in Python behandeld als objecten. Dus net als objecten in Python, kunnen functies ook als argument aan een andere functie worden doorgegeven.
Bijvoorbeeld:
def mul(x, y): return x*y def add(mul, y): return mul+y x = add(mul(9, 10), 10) print(x)
In het bovenstaande codeblok is te zien dat de mul-functie als argument aan de add-functie wordt doorgegeven en het wordt opgeslagen in de x-variabele die vervolgens wordt afgedrukt om het antwoord te verifiëren.
100
Functies gebruiken binnen een functie
In Python kunnen we een functie binnen een andere functie definiëren. Deze functies worden geneste functies genoemd. Maar in dit gebruiksgeval kan de binnenste functie of geneste functie niet afzonderlijk worden aangeroepen. Beide voorbeelden worden geïllustreerd in het volgende codeblok.
Laten we onze eerste functie schrijven.
def mul(x, y): m = x*y def square(m): return m*m return square(m) x = mul(9, 10) print(x)
Output: 8100
In het bovenstaande codeblok is de buitenste functie “mul” die de functie square retourneert die een argument “m” neemt, wat het product is van twee argumenten die aan de “mul”-functie zijn gegeven. De code-uitvoering begint eerst met het aanroepen van de “mul”-functie, vervolgens wordt het product van “x” en “y” opgeslagen in de “m”-variabele. Aangezien deze functie de square-functie retourneert, wordt de “square”-functie aangeroepen en het uiteindelijke product, dat het kwadraat van “m” is, wordt geretourneerd.
Laten we een paar belangrijke dingen in Python leren, die je programmeerreis met Python veel beter zullen maken.
*Args in Python
Dit zijn de argumenten die we gebruiken als functieparameters. Laten we een gebruikelijke functie schrijven met wat we tot nu toe hebben geleerd. We zullen een functie schrijven die ons het maximale oppervlak van een rechthoek kan geven, gegeven 2 rechthoekoppervlakken als parameters voor de functie.
def maxarea(a, b): if a > b: return f'rechthoek a heeft het grootste oppervlak, namelijk {a}' else: return f'rechthoek a heeft het grootste oppervlak, namelijk {b}' x = maxarea(100, 60) print(x)
Output: rechthoek a heeft het grootste oppervlak, namelijk 100 [code lang="js"]
Deze functie is goed voor 2 parameters of argumenten, maar wat als we meer dan 2 oppervlakken moeten vergelijken. Een benadering zou zijn om een lijst van oppervlakken in de functie door te geven.
def maxarea(lis): max = 0 for i in lis: if i > max: max = i return f"rechthoek met het grootste oppervlak is {max}" x = maxarea([100, 60, 50]) print(x)
Output: rechthoek met het grootste oppervlak is 100
Deze benadering is goed, maar we moeten van tevoren weten hoeveel parameters of argumenten we moeten geven. In de uitvoering van de code in real-time zou dit een probleem zijn. Daarom, om het leven van de programmeur gemakkelijker te maken, Python gebruikt *args en **kwargs.
“*” operator in Python
Deze operator is een unpacking-operator die meestal wordt gebruikt om een onbepaald aantal parameters of argumenten door te geven.
Argumenten uitpakken in een tuple met behulp van de * operator
Zoals we hebben gezien, wordt de “*” operator gebruikt voor het uitpakken van waarden. Het voorbeeld wordt hieronder geïllustreerd.
x = [1, 2, 3, 4] y = [5, 6, 7, 8] z = *x, *y print(type(z)) print(z)
Output: <class 'tuple'> (1, 2, 3, 4, 5, 6, 7, 8)
Zoals we kunnen zien, heeft de unpacking-operator lijst x en lijst y in de tuple z uitgepakt. We kunnen ook zien dat het resultaat een tuple is.
Laten we dezelfde functie schrijven met behulp van *Args.
def maxarea(*lis): max = 0 for i in lis: if i > max: max = i return f"rechthoek met het grootste oppervlak is {max}" x = maxarea(100, 60, 50, 200) y = maxarea(100, 60, 50, 200, 9000) z = maxarea(100, 60, 50, 20, 90) print(x) print(y) print(z)
Output: rechthoek met het grootste oppervlak is 200 rechthoek met het grootste oppervlak is 9000 rechthoek met het grootste oppervlak is 100
In dit codeblok kunnen we zien dat de argumenten nu dynamisch zijn, we kunnen een willekeurig aantal argumenten toevoegen die in de maxarea-functie worden uitgepakt om ons het gewenste resultaat te geven. Ook kunnen we in deze context een willekeurig aantal oppervlakken vergelijken.
**kwargs in Python
De kwargs is als args, maar het accepteert positionele argumenten. Het gebruikt de ** operator die enkele eigenschappen heeft, zoals het uitpakken van meerdere positionele argumenten van willekeurige lengte, kan ook woordenboeken uitpakken, kan ook worden gebruikt voor het combineren van twee woordenboeken.
Woordenboeken samenvoegen
a = {"h": 1, "n": 2} b = {"m": 5, "l": 10} c = {**a, **b} print(type(c)) print(c) We kunnen uit de bovenstaande code zien dat we 2 woordenboeken a en b hebben die zijn samengevoegd met behulp van de ** operator om een ander woordenboek te geven. Output: <class 'dict'> {'h': 1, 'n': 2, 'm': 5, 'l': 10}
Wanneer we de * operator in plaats van de ** operator gebruiken, is de code voor deze case hieronder geïllustreerd.
a = {"h": 1, "n": 2} b = {"m": 5, "l": 10} c = {*a, *b} print(type(c)) print(c)
Output: <class 'set'> {'n', 'l', 'm', 'h'}
Daarom, wanneer de * operator op twee woordenboeken wordt gebruikt om te combineren, zal de uitkomst een set zijn met alleen de sleutels van het woordenboek.
De maxarea-functie met behulp van **kwargs wordt geïllustreerd in het onderstaande codeblok.
def maxarea(**lis): max = 0 for i in lis.values(): if i > max: max = i return f"rechthoek met het grootste oppervlak is {max}" x = maxarea(a=1, b=2, c=3) y = maxarea(a=1, b=2) z = maxarea(a=1, b=2, c=3, d=9) print(x) print(y) print(z)
Output: rechthoek met het grootste oppervlak is 3 rechthoek met het grootste oppervlak is 2 rechthoek met het grootste oppervlak is 9
In deze blog over geavanceerde functies in Python hebben we onderwerpen behandeld zoals functies doorgeven aan andere functies, functies gebruiken binnen een functie, *Args in Python, “*” operator in Python, **kwargs in Python, en meer. De verdere onderwerpen die klassen omvatten, zullen worden behandeld in de volgende blogpost. Huiswerk met betrekking tot geavanceerde functies in Python is hieronder gegeven.
Agnieszka Markowska-Szmaj
Python Course From Beginner to Advanced in 11 blog posts:
- Python-tuple, lijsten, verzamelingen en woordenboeken. Deel 3 Python-cursus van beginner tot gevorderde in 11 blogposts
- Python-functies. Deel 7 Python-cursus van beginner tot gevorderd in 11 blogposts
- Inleiding tot de Python-cursus. Deel 1 Python-cursus van beginner tot gevorderd in 11 blogposts
- Variabelen en Gegevenstypen in Python. Deel 2 Python Cursus van Beginner tot Gevorderd in 11 blogposts
- Python sets en woordenboeken. Deel 4 Python Cursus van Beginner tot Gevorderd in 11 blogposts
- Python-klassen en -objecten. Deel 9 Python-cursus van beginner tot gevorderd in 11 blogposts
- Bestanden in Python. Deel 10 Python Cursus van Beginner tot Gevorderd in 11 blogposts
- Lussen in Python. Deel 6 Python Cursus van Beginner tot Gevorderd in 11 blogposts
- Geavanceerde functies in Python. Deel 8 Python Cursus van Beginner tot Gevorderd in 11 blogposts