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:

  1. Funktionen an andere Funktionen übergeben
  2. Funktionen innerhalb einer Funktion verwenden
  3. *Args in Python
  4. “*” Operator in Python
  5. **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.

advanced_functions_in_Python

Agnieszka Markowska-Szmaj

View all posts →