Dieser Artikel wird dem Leser helfen, vom vorherigen Blog über Python-Funktionen fortzufahren, zusammen mit einigen grundlegenden Anwendungen in der realen Welt. Wir werden Visual Studio Code als unseren Code-Editor verwenden. Wenn Sie Visual Studio Code nicht installiert haben, sind die Anweisungen im ersten Blog.
Erweiterte Funktionen in Python – Inhaltsverzeichnis:
- Funktionen an andere Funktionen übergeben
- Funktionen innerhalb einer Funktion verwenden
- *Args in Python
- “*” Operator in Python
- **kwargs in Python
Funktionen an andere Funktionen übergeben
Wie im vorherigen Blog besprochen, werden Funktionen in Python als Objekte behandelt. So wie Objekte in Python können auch Funktionen als Argument an eine andere Funktion übergeben werden.
Zum Beispiel:
def mul(x, y): return x*y def add(mul, y): return mul+y x = add(mul(9, 10), 10) print(x)
Im obigen Codeblock ist zu sehen, dass die mul-Funktion als Argument an die add-Funktion übergeben wird und in der Variablen x gespeichert wird, die dann ausgegeben wird, um die Antwort zu überprüfen.
100
Funktionen innerhalb einer Funktion verwenden
In Python können wir eine Funktion innerhalb einer anderen Funktion definieren. Diese Funktionen werden als geschachtelte Funktionen bezeichnet. In diesem Anwendungsfall kann die innere Funktion oder geschachtelte Funktion jedoch nicht separat aufgerufen werden. Beide Beispiele sind im folgenden Codeblock veranschaulicht.
Lass uns unsere erste Funktion schreiben.
def mul(x, y): m = x*y def square(m): return m*m return square(m) x = mul(9, 10) print(x)
Ausgabe: 8100
Im obigen Codeblock ist die äußere Funktion “mul”, die die Funktion square zurückgibt, die ein Argument “m” annimmt, das das Produkt der beiden Argumente ist, die an die “mul”-Funktion übergeben werden. Die Codeausführung beginnt zuerst mit dem Aufruf der “mul”-Funktion, dann wird das Produkt von “x” und “y” in der Variablen “m” gespeichert. Da diese Funktion die square-Funktion zurückgibt, wird die “square”-Funktion aufgerufen und das endgültige Produkt, das das Quadrat von “m” ist, wird zurückgegeben.
Lass uns einige wichtige Dinge in Python lernen, die deine Programmierreise mit Python viel besser machen werden.
*Args in Python
Dies sind die Argumente, die wir als Funktionsparameter verwenden. Lass uns eine übliche Funktion schreiben, die das, was wir bisher gelernt haben, verwendet. Wir werden eine Funktion schreiben, die uns die maximale Fläche eines Rechtecks gibt, wenn 2 Rechtecksflächen als Parameter an die Funktion übergeben werden.
def maxarea(a, b): if a > b: return f'Rechteck a hat die größere Fläche, die {a} beträgt' else: return f'Rechteck a hat die größere Fläche, die {b} beträgt' x = maxarea(100, 60) print(x)
Ausgabe: Rechteck a hat die größere Fläche, die 100 beträgt [code lang="js"]
Diese Funktion ist gut für 2 Parameter oder Argumente, aber was ist, wenn wir mehr als 2 Flächen vergleichen müssen? Ein Ansatz wäre, eine Liste von Flächen in die Funktion zu übergeben.
def maxarea(lis): max = 0 for i in lis: if i > max: max = i return f"Das Rechteck mit der größeren Fläche ist {max}" x = maxarea([100, 60, 50]) print(x)
Ausgabe: Das Rechteck mit der größeren Fläche ist 100
Dieser Ansatz ist gut, aber wir sollten die Anzahl der Parameter oder Argumente im Voraus wissen. Bei der Ausführung von Echtzeitcode wäre dies eine mühsame Aufgabe. Um das Leben des Programmierers zu erleichtern, verwendet Python *args und **kwargs.
“*” Operator in Python
Dieser Operator ist ein Entpackungsoperator, der normalerweise verwendet wird, um eine nicht spezifizierte Anzahl von Parametern oder Argumenten zu übergeben.
Argumente in ein Tupel mit dem *-Operator entpacken
Wie wir gesehen haben, wird der “*”-Operator zum Entpacken von Werten verwendet. Das Beispiel ist unten veranschaulicht.
x = [1, 2, 3, 4] y = [5, 6, 7, 8] z = *x, *y print(type(z)) print(z)
Ausgabe: <class 'tuple'> (1, 2, 3, 4, 5, 6, 7, 8)
Wie wir sehen können, hat der Entpackungsoperator die Liste x und die Liste y in das Tupel z entpackt. Wir können auch sehen, dass das Ergebnis ein Tupel ist.
Lass uns die gleiche Funktion mit *Args schreiben.
def maxarea(*lis): max = 0 for i in lis: if i > max: max = i return f"Das Rechteck mit der größeren Fläche ist {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)
Ausgabe: Das Rechteck mit der größeren Fläche ist 200 Das Rechteck mit der größeren Fläche ist 9000 Das Rechteck mit der größeren Fläche ist 100
In diesem Codeblock können wir sehen, dass die Argumente jetzt dynamisch sind, wir können beliebig viele Argumente hinzufügen, die in der maxarea-Funktion entpackt werden, um uns das gewünschte Ergebnis zu geben. Außerdem können wir in diesem Kontext beliebig viele Flächen vergleichen.
**kwargs in Python
Die kwargs sind wie args, aber sie akzeptieren positionsabhängige Argumente. Sie verwenden den **-Operator, der einige Eigenschaften hat, wie das Entpacken mehrerer positionsabhängiger Argumente beliebiger Länge, kann auch Wörterbücher entpacken und kann auch zum Kombinieren von zwei Wörterbüchern verwendet werden.
Wörterbücher zusammenführen
a = {"h": 1, "n": 2} b = {"m": 5, "l": 10} c = {**a, **b} print(type(c)) print(c) Wir können aus dem obigen Code sehen, dass wir 2 Wörterbücher a und b haben, die mit dem **-Operator zusammengeführt werden, um ein weiteres Wörterbuch zu erstellen. Ausgabe: <class 'dict'> {'h': 1, 'n': 2, 'm': 5, 'l': 10}
Wenn wir den *-Operator anstelle des **-Operators verwenden, wird der Code für diesen Fall unten veranschaulicht.
a = {"h": 1, "n": 2} b = {"m": 5, "l": 10} c = {*a, *b} print(type(c)) print(c)
Ausgabe: <class 'set'> {'n', 'l', 'm', 'h'}
Daher, wenn der *-Operator auf zwei Wörterbücher zum Zusammenführen angewendet wird, wird das Ergebnis ein Set mit nur den Schlüsseln aus dem Wörterbuch sein.
Die maxarea-Funktion, die **kwargs verwendet, ist im folgenden Codeblock veranschaulicht.
def maxarea(**lis): max = 0 for i in lis.values(): if i > max: max = i return f"Das Rechteck mit der größeren Fläche ist {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)
Ausgabe: Das Rechteck mit der größeren Fläche ist 3 Das Rechteck mit der größeren Fläche ist 2 Das Rechteck mit der größeren Fläche ist 9
In diesem Blog über erweiterte Funktionen in Python haben wir Themen behandelt wie das Übergeben von Funktionen an andere Funktionen, das Verwenden von Funktionen innerhalb einer Funktion, *Args in Python, den “*”-Operator in Python, **kwargs in Python und mehr. Die weiteren Themen, die Klassen umfassen, werden im nächsten Blogbeitrag. Die Hausaufgaben zu den erweiterten Funktionen in Python sind unten angegeben.
Agnieszka Markowska-Szmaj
Python Course From Beginner to Advanced in 11 blog posts:
- Python-Tupel, -Listen, -Mengen und -Wörterbücher. Teil 3 Python-Kurs von Anfänger bis Fortgeschrittene in 11 Blogbeiträgen
- Python-Funktionen. Teil 7 Python-Kurs von Anfänger bis Fortgeschrittene in 11 Blogbeiträgen
- Einführung in den Python-Kurs. Teil 1 Python-Kurs von Anfänger bis Fortgeschrittene in 11 Blogbeiträgen
- Variablen und Datentypen in Python. Teil 2 Python-Kurs von Anfänger bis Fortgeschrittene in 11 Blogbeiträgen
- Python-Sets und -Wörterbücher. Teil 4 Python-Kurs von Anfänger bis Fortgeschrittene in 11 Blogbeiträgen
- Python-Klassen und -Objekte. Teil 9 Python-Kurs von Anfänger bis Fortgeschrittene in 11 Blogbeiträgen
- Dateien in Python. Teil 10 Python-Kurs von Anfänger bis Fortgeschrittene in 11 Blogbeiträgen
- Schleifen in Python. Teil 6 Python-Kurs von Anfänger bis Fortgeschrittene in 11 Blogbeiträgen
- Erweiterte Funktionen in Python. Teil 8 Python-Kurs von Anfänger bis Fortgeschrittene in 11 Blogbeiträgen