Mehrere Funktionen höherer Ordnung, die Sie lernen müssen, um Python zu lernen

1. Lambda-Ausdruck

Eine anonyme Funktion (Englisch: anonyme Funktion) bezieht sich auf eine Klasse von Funktionen, für die kein Bezeichner (Funktionsname) definiert werden muss. Für Laien erlaubt es uns, ohne Funktionsnamen zu funktionieren.

Unter normalen Umständen definieren wir eine Funktion, mit der defSchlüsselwörter, und wenn Sie lernen , anonyme Funktionen zu nutzen, alternative defist lambda.

Verwenden Sie hier defund lambdasind ein Beispiel, Sie werden bald verstehen.

def mySum(x, y):
    return x+y
mySum(2, 3)
# 5

(lambda x, y: x+y)(2, 4)
# 6

Aus dem obigen Beispiel können wir erkennen, dass die anonyme Funktion direkt ausgeführt wird und viele Codezeilen speichert. Gibt es welche?

Schauen wir uns als nächstes die Verwendung genauer an

带 wenn / sonst

>>>( lambda x, y: x if x < y else y )( 1, 2 )
1

Verschachtelte Funktion

>>>( lambda x: ( lambda y: ( lambda z: x + y + z  )( 1 ) )( 2 ) )( 3 )
6

rekursive Funktion

>>> func = lambda n:1 if n == 0 else n * func(n-1)
>>> func(5)
120

oder

>>> f = lambda func, n: 1 if n == 0 else n * func( func, n - 1 )
>>> f(f,4)
24

Im obigen Beispiel sind Lambda-Ausdrücke im Vergleich zu regulären Funktionen seltsam und weniger lesbar. Abgesehen davon, dass es direkt ausgeführt werden kann, scheint es keine andere wichtigere Funktion zu geben. Warum führen wir sie heute ein?

Zunächst müssen wir wissen, dass Lambda ein Ausdruck ist, keine Aussage. Aufgrund dieser Funktion können wir sie in einigen speziellen Szenen verwenden. Was ist die spezifische Szene? Als nächstes werden wir einige sehr nützliche integrierte Funktionen vorstellen.

2. Kartenfunktion

Die Map-Funktion empfängt zwei Parameter, der erste Parameter ist ein Funktionsobjekt (natürlich kann es auch ein Lambda-Ausdruck sein), der zweite Parameter ist eine Sequenz.

Welche Art von Funktionen kann es erreichen? Ich werde Ihnen ein Beispiel geben.

>>> map(lambda x: x*2, [1,2,3,4,5])
[2, 4, 6, 8, 10]

Es ist deutlich zu erkennen, dass jedes Element in der folgenden Reihenfolge als Parameter an das Lambda übergeben werden kann.

Wenn wir die Kartenfunktion nicht verwenden, können Sie so schreiben.

mylist=[]
for i in [1,2,3,4,5]:
    mylist.append(i*2)

3. Filterfunktion

Die Filterfunktion ähnelt der Kartenfunktion. Es empfängt auch zwei Parameter, einen Lambda-Ausdruck und eine Sequenz. Es durchläuft jedes Element in der nachfolgenden Sequenz und übergibt es als Parameter an den Lambda-Ausdruck. Wenn der Ausdruck True zurückgibt, bleibt das Element erhalten. Wenn der Ausdruck False zurückgibt, wird das Element verworfen.

Im folgenden Beispiel wird eine Liste von Elementen mit weniger als 0 herausgefiltert.

>>>filter(lambda x: x < 0, range(-5, 5))
[-5, -4, -3, -2, -1]

4. Funktion reduzieren

Die Reduktionsfunktion ist ähnlich. Seine Funktion besteht darin, zuerst das erste und das zweite Element in der Sequenz zu bearbeiten und dann die Lambda-Funktion zu verwenden, um das Ergebnis mit den dritten Daten zu berechnen, und dann das Ergebnis mit dem vierten Element zu berechnen, und so weiter. Bis es keine Elemente mehr gibt.

Hier ist ein Beispiel, das Sie verstehen werden.

>>>reduce(lambda x,y: x+y, [1,2,3,4,5])
15

Der Berechnungsprozess ist so aufgebaut.

1+2=3
3+3=6
6+4+10
10+5=15

5. Vorsichtsmaßnahmen

Die oben genannten Funktionen, die das Schreiben geschickt beherrschen, können dazu führen, dass unser Code pythonischer aussieht, und bis zu einem gewissen Grad sieht der Code prägnanter aus.

Wenn Sie ein Anfänger sind, müssen Sie beachten, dass das obige Beispiel in der Python 2.x-Umgebung demonstriert wird. In Python 3.x ist es anders, Sie können es selbst versuchen.

Hier ist eine Zusammenfassung:

Erstens ist das, was die Karten- und Filterfunktionen zurückgeben, keine Liste mehr, sondern ein Iteratorobjekt. Hier ist ein Beispiel für eine Karte

>>> map_obj = map(lambda x: x*2, [1,2,3,4,5])
>>> from collections.abc import Iterator
>>> isinstance(map_obj, Iterator)
True
>>> next(map_obj)
2
>>> list(map_obj)
[4, 6, 8, 10]

Der zweite Punkt ist, dass redu nicht direkt aufgerufen werden kann, sondern importiert werden muss, bevor es verwendet werden kann.

from functools import reduce

Ich denke du magst

Origin blog.csdn.net/weixin_36338224/article/details/109350873
Empfohlen
Rangfolge