Beim Programmieren gibt es Momente, in denen man denkt: "Oh wow!" Es sind die Codes, die komplexe Logik erstaunlich einfach und elegant lösen und als 'Pythonic' bezeichnet werden.
Heute möchte ich drei einfache, aber kraftvolle Pythonic Code-Snippets vorstellen, die uns gemeinsam begeistert haben.
1. Prefix-Slicing: Die wahre Stärke eines dynamischen Ansatzes
Wenn man den Basis-Pfad aus einem Dateipfad entfernen und nur den relativen Pfad erhalten möchte, kombiniert man len() mit String-Slicing.
# Beispiel 1
prefix = "/var/data/user/files"
p = "/var/data/user/files/report.txt"
if p.startswith(prefix):
relative_path = p[len(prefix):]
print(relative_path)
# /report.txt
Auf den ersten Blick scheint es keinen Unterschied zu p[22:] zu geben (indem man die Zahl 22 direkt eingibt). Aber der wahre Wert dieses Codes wird sichtbar, wenn der Prefix dynamisch geändert wird.
✅ The Pythonic Way (Die wahre Stärke)
Stellen Sie sich vor, Sie müssen Datenpfade für mehrere Benutzer verarbeiten.
def get_relative_path(full_path, user_name):
# ⭐️ Der Prefix ändert sich dynamisch je nach user_name!
prefix = f"/var/data/{user_name}/files"
if full_path.startswith(prefix):
# len() berechnet jedes Mal die genaue dynamische Länge.
# user1 hat 22, long_user hat 29...
return full_path[len(prefix):]
return full_path
# 'user1' (Prefix-Länge 22)
path1 = "/var/data/user1/files/report.txt"
print(f"user1: {get_relative_path(path1, 'user1')}")
# 'long_user_name_2' (Prefix-Länge 29)
path2 = "/var/data/long_user_name_2/files/document.pdf"
print(f"user2: {get_relative_path(path2, 'long_user_name_2')}")
Ergebnis:
user1: /report.txt
user2: /document.pdf
😲 Begeisterungspunkt
Der Code hängt nicht von _Inhalt_ oder _festen Längen_ des Prefix ab. Er verwendet ausschließlich die len() über die in Echtzeit berechnete Länge für das [N:] Slicing.
Das unterscheidet sich fundamental von p[22:] und ist ein wartungsfreundlicher und robuster Code.
2. Magischer Swap ohne temporäre Variable
Beim Tauschen der Werte von zwei Variablen benötigen wir keine temporäre Variable namens temp.
✅ The Pythonic Way
a = 10
b = 20
# Python-mäßiges Tauschen
a, b = b, a
print(f"a = {a}, b = {b}")
# a = 20, b = 10
😲 Begeisterungspunkt
Dies nutzt die Packing und Unpacking von Tupel.
-
b, a: Der Wert(20, 10)rechts vom Gleichheitszeichen wird in einem temporären Tupel 'gepackt'. -
a, b = ...: Die Werte dieses Tupels werden nacheinander in die Variablenaundb'entpackt'.
„a und b zu b und a wechseln“ ist absichtlich im Code festgehalten.
3. for Schleife in einer Zeile: Die Magie der 'Komprehension'
„Ich möchte mit bestimmten Daten arbeiten, nur die Elemente auswählen, die bestimmten Bedingungen entsprechen, sie transformieren und eine neue Sammlung erstellen.“
Dieser lange Satz wird oft in 4-5 Zeilen for Schleifen übersetzt. Python komprimiert diesen Prozess in eine Zeile.
Dictionaries: Schlüssel und Wert umdrehen
Die Begeisterung des Tauschs setzt sich in Dictionaries fort. Hier wird k:v in v:k umgedreht.
# Traditioneller Ansatz
my_dict = {'name': 'Alice', 'job': 'Engineer'}
inverted_dict = {}
for k, v in my_dict.items():
inverted_dict[v] = k
✅ The Pythonic Way (Dictionay Comprehension)
my_dict = {'name': 'Alice', 'job': 'Engineer'}
# "Neue dict aus k,v aus my_dict erstellen, wobei v:k Paare sind"
inverted_dict = {v: k for k, v in my_dict.items()}
print(inverted_dict)
# {'Alice': 'name', 'Engineer': 'job'}
(Diese Methode funktioniert jedoch nur, wenn Werte einzigartig sind.)
Listen: Neue Liste mit passenden Elementen erstellen
Diese Magie wird oft in Listen verwendet. Lassen Sie uns eine Liste der Quadrieren der geraden Zahlen von 0-9 erstellen.
# Traditioneller Ansatz
squares_of_evens = []
for i in range(10):
if i % 2 == 0:
squares_of_evens.append(i * i)
✅ The Pythonic Way (List Comprehension)
# "i von 0 bis 9 durchlaufen(for), falls i gerade ist(if), liste mit i*i erstellen(what)"
squares_of_evens = [i * i for i in range(10) if i % 2 == 0]
print(squares_of_evens)
# [0, 4, 16, 36, 64]
😲 Begeisterungspunkt
Komprehension verändert den Code, sodass wir lieber 'was' wir wollen deklarieren, anstatt lange zu erklären 'wie' wir es machen (wie: leere Liste, Schleife, append...).
Fazit: Wenn Code begeistert
Die drei Snippets, die wir heute betrachtet haben, sind keine einfachen 'Coding-Tipps'.
Sie zeigen „Wie können wir unsere Absichten klarer, prägnanter und schöner ausdrücken?“, was die Philosophie von Python ist (The Zen of Python).
Der Code geht über bloße Befehle für Maschinen hinaus und wird zu einem 'Text', der die Gedanken des Entwicklers ausdrückt. Wie gut geschriebene Texte uns faszinieren können, so kann auch gut geschriebener Code uns mit einem „Oh wow!“ überraschen.
Ich hoffe, dass auch Ihr Code voller solcher 'Pythonic Begeisterung' ist.
Es sind keine Kommentare vorhanden.