Funktionelle Programmierung in Python: Nutzung von Lambda-Funktionen und Funktionen höherer OrdnungFunktionelle Programmierung in Python: Nutzung von Lambda-Funktionen und Funktionen höherer Ordnung
Bild von Herausgeber (Kanwal Mehreen) | Leinwand

# Einführung

Haben Sie jemals ein Python -Skript voller Schleifen und Bedingungen gestarrt und gefragt, ob es eine einfachere Möglichkeit gibt, Dinge zu erledigen? Ich struggle auch dort. Vor ein paar Jahren habe ich Stunden damit verbracht, ein klobiges Datenverarbeitungsskript umzuschreiben, bis ein Kollege beiläufig erwähnte.Warum nicht Lambda -Funktionen probieren?Dieser Vorschlag hat nicht nur meinen Code verändert – sondern wie ich Probleme in Python nähere.

Sprechen wir darüber, wie Funktionelle Programmierung in Python Kann Ihnen helfen, sauberer und ausdrucksstärkerer Code zu schreiben. Unabhängig davon, ob Sie Aufgaben automatisieren, Daten analysieren oder Apps erstellen, Lambda-Funktionen und Funktionen höherer Ordnung beherrschen, erhöhen sich Ihre Fähigkeiten.

# Was genau ist die funktionale Programmierung?

Die funktionelle Programmierung (FP) ist wie das Backen von Brot anstatt eine gefrorene Scheibe zu mikrowieren. Anstatt die Daten Schritt für Schritt (Mikrowellenanweisungen) zu ändern, definieren Sie, was Sie wollen (die Zutaten) und lassen die Funktionen das „Wie“ (das Backen) übernehmen. Die Kernideen sind:

  • Reine Funktionen: Keine Nebenwirkungen. Der gleiche Eingang erzeugt immer die gleiche Ausgabe
  • Unveränderliche Daten: Vermeiden Sie Variablen zu ändern; Erstellen Sie stattdessen neue
  • Erstklassige Funktionen: Behandeln Sie Funktionen wie Variablen – geben Sie sie herum, geben Sie sie zurück und lagern Sie sie

Python ist keine reine funktionale Sprache (wie Haskell), aber es ist flexibel genug, um FP -Konzepte zu leihen, in denen sie glänzen.

# Lambda -Funktionen: Die schnellen Korrekturen von Python

// Was sind Lambda -Funktionen?

Eine Lambda -Funktion ist eine winzige, anonyme Funktion, die Sie im laufenden Fliegen definieren. Betrachten Sie es als einen „Funktionsnack“ anstelle einer vollen Mahlzeit.

Seine Syntax ist einfach:

lambda arguments: expression

Zum Beispiel finden Sie hier eine traditionelle Funktion:

def add(a, b):
    return a + b

Und hier ist seine Lambda -Model:

// Wann sollten Sie Lambda -Funktionen verwenden?

Lambda-Funktionen sind ideally suited für kurze, einmalige Operationen. Zum Beispiel bei der Sortierung einer Liste von Tupeln nach dem zweiten Factor:

college students = (("Alice", 89), ("Bob", 72), ("Charlie", 95))

# Kinds by grade (the second component of the tuple)
college students.type(key=lambda x: x(1))

Gemeinsame Anwendungsfälle umfassen:

  • Innerhalb von Funktionen höherer Ordnung: Sie arbeiten perfekt mit map()Anwesend filter()oder scale back()
  • Vermeiden Sie triviale Helferfunktionen: Wenn Sie eine einfache einmalige Berechnung benötigen, speichert Sie eine Lambda-Funktion vor der Definition einer vollständigen Funktion

Aber Vorsicht: Wenn Ihre Lambda -Funktion zu komplex aussieht, wie lambda x: (x**2 + (x/3)) % 4Es ist Zeit, eine richtige, benannte Funktion zu schreiben. Lambdas dient Einfachheit halber und nicht zum Erstellen von kryptischer Code.

# Funktionen höherer Ordnung

Funktionen höherer Ordnung (HOFs) sind Funktionen, die beide:

  • Nehmen Sie andere Funktionen als Argumente oder
  • Rückgabefunktionen als Ergebnisse

Pythons eingebaute HoFs sind Ihre neuen besten Freunde. Lassen Sie uns sie zusammenbrechen.

// Karte: Daten ohne Schleifen transformieren

Der map() Die Funktion wendet eine weitere Funktion auf jedes Factor in einer Sammlung an. Lassen Sie uns beispielsweise eine Liste von Temperaturen von Celsius in Fahrenheit konvertieren.

celsius = (23, 30, 12, 8)
fahrenheit = checklist(map(lambda c: (c * 9/5) + 32, celsius))

# fahrenheit is now (73.4, 86.0, 53.6, 46.4)

Warum benutzen map()?

  • Es vermeidet eine manuelle Loop -Indexierung
  • Es ist oft sauberer als Listenfotografien für einfache Transformationen

// Filter: Behalten Sie, was Sie brauchen

Der filter() Die Funktion wählt Elemente aus einem iterablen aus, die eine bestimmte Bedingung erfüllen. Lassen Sie uns beispielsweise die geraden Zahlen in einer Liste finden.

numbers = (4, 7, 12, 3, 20)
evens = checklist(filter(lambda x: x % 2 == 0, numbers))

# evens is now (4, 12, 20)

// Reduzieren: Kombinieren Sie alles

Der scale back() Funktion, aus dem Functools Modul aggregiert Werte von einem iterablen in ein einzelnes Ergebnis. Sie können es beispielsweise verwenden, um das Produkt aller Zahlen in einer Liste zu berechnen.

from functools import scale back

numbers = (3, 4, 2)
product = scale back(lambda a, b: a * b, numbers)

# product is now 24

// Erstellen Sie Ihre eigenen Funktionen höherer Ordnung

Sie können auch Ihre eigenen HoFs erstellen. Lassen Sie uns einen „Wiederholung“ erstellen, der eine Funktion erneut ausführt, wenn sie fehlschlägt:

import time

def retry(func, max_attempts=3):
    def wrapper(*args, **kwargs):
        makes an attempt = 0
        whereas makes an attempt < max_attempts:
            strive:
                return func(*args, **kwargs)
            besides Exception as e:
                makes an attempt += 1
                print(f"Try {makes an attempt} failed: {e}")
                time.sleep(1) # Wait earlier than retrying
        increase ValueError(f"All {max_attempts} makes an attempt failed!")
    return wrapper

Sie können diesen Hof als Dekorateur verwenden. Stellen Sie sich vor, Sie haben eine Funktion, die aufgrund eines Netzwerkfehlers fehlschlagen könnte:

@retry
def fetch_data(url):
    # Think about a dangerous community name right here
    print(f"Fetching knowledge from {url}...")
    increase ConnectionError("Oops, timeout!")

strive:
    fetch_data("https://api.instance.com")
besides ValueError as e:
    print(e)

// Mischen von Lambdas und HoFs: ein dynamisches Duo

Lassen Sie uns diese Instruments kombinieren, um die Benutzeranmeldungen mit den folgenden Anforderungen zu verarbeiten:

  • Validieren Sie E -Mails, um sicherzustellen, dass sie mit „@gmail.com“ enden
  • Benutzungsnamen nutzen
signups = (
    {"title": "alice", "e mail": "alice@gmail.com"},
    {"title": "bob", "e mail": "bob@yahoo.com"}
)

# First, capitalize the names
capitalized_signups = map(lambda person: {**person, "title": person("title").capitalize()}, signups)

# Subsequent, filter for legitimate emails
valid_users = checklist(
    filter(lambda person: person("e mail").endswith("@gmail.com"), capitalized_signups)
)

# valid_users is now ({'title': 'Alice', 'e mail': 'alice@gmail.com'})

# Gemeinsame Bedenken und Finest Practices

// Lesbarkeit

Einige Entwickler stellen fest, dass komplexe Lambdas oder verschachtelte HoFs schwer zu lesen sind. Um Klarheit aufrechtzuerhalten, befolgen Sie die folgenden Regeln:

  • Halten Sie die Lambda -Funktionskörper auf einen einzigen einfachen Ausdruck
  • Verwenden Sie beschreibende Variablennamen (z. lambda scholar: scholar.grade)
  • Für komplexe Logik bevorzugen Sie immer einen Normal def Funktion

// Leistung

Ist die funktionelle Programmierung langsamer? Manchmal. Der Overhead of Name -Funktionen kann etwas höher sein als eine direkte Schleife. Für kleine Datensätze ist dieser Unterschied vernachlässigbar. Für leistungskritische Vorgänge in großen Datensätzen können Sie Generatoren oder Funktionen aus der itertools Modul wie itertools.imap.

// Wann vermeiden Sie funktionale Programmierung

FP ist ein Werkzeug, keine Silberkugel. Möglicherweise möchten Sie in diesen Fällen an einen imperativen oder objektorientierten Stil festhalten:

  • Wenn Ihr Workforce mit funktionalen Programmierkonzepten nicht vertraut ist, ist der Code möglicherweise schwer zu pflegen
  • Für komplexe Staatsmanagement sind Klassen und Objekte häufig eine intuitivere Lösung

# Beispiel für reale Welt: Datenanalyse einfach gemacht

Stellen Sie sich vor, Sie analysieren Uber -Fahrstände und möchten die durchschnittliche Entfernung für Fahrten länger als drei Meilen berechnen. So kann die funktionale Programmierung die Aufgabe rationalisieren:

from functools import scale back

rides = (2.3, 5.7, 3.8, 10.2, 4.5)

# Filter for rides longer than 3 miles
long_rides = checklist(filter(lambda distance: distance > 3, rides))

# Calculate the sum of those rides
total_distance = scale back(lambda a, b: a + b, long_rides, 0)

# Calculate the common
average_distance = total_distance / len(long_rides)

# average_distance is 6.05

Bereit, funktionale Programmierung auszuprobieren? Fang klein:

  • Ersetzen Sie eine einfache für die Schleife durch map()
  • Refactor eine bedingte Überprüfung in einer Schleife verwenden filter()
  • Teilen Sie Ihren Code in den Kommentaren – ich würde ihn gerne sehen

# Abschluss

Funktionelle Programmierung In Python geht es nicht um Dogma – es geht darum, mehr Instruments zum Schreiben eines klaren, effizienten Code zu haben. Lambda Funktionen Und Funktionen höherer Ordnung sind wie das Schweizer Armeemesser in Ihrem Codierungs -Toolkit: nicht für jeden Job, sondern von unschätzbarem Wert, wenn sie passen.

Hast du eine Frage oder ein cooles Beispiel? Schreiben Sie unten einen Kommentar!

Shittu Olumide ist ein Software program-Ingenieur und technischer Autor, der sich leidenschaftlich für die Nutzung hochmoderner Technologien für überzeugende Erzählungen befindet, mit einem scharfen Auge für Particulars und einem Händchen zur Vereinfachung komplexer Konzepte. Sie können auch Shittu finden Twitter.



Von admin

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert