

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()Anwesendfilter()oderscale 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
defFunktion
// 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.
