5 Python-Funktionen, die ich nicht kannte - aber vergebens

Python kann ohne Zweifel als eine Sprache bezeichnet werden, die im letzten Jahrzehnt ein bedeutendes Wachstum erlebt hat, eine Sprache, die sich als mächtig erwiesen hat. Ich habe viele Python-Anwendungen erstellt, von interaktiven Karten bis hin zu Blockchains . Python hat eine Menge Funktionen. Für Anfänger ist es sehr schwierig, all dies auf einmal zu erfassen.



Selbst wenn Sie ein Programmierer sind, der von einer anderen Sprache wie C zu Python wechselt, oder wenn Sie ein Wissenschaftler sind, der in MATLAB gearbeitet hat, ist die Python-Programmierung mit Abstraktionen auf hoher Ebene auf jeden Fall eine ganz besondere Erfahrung. Ich möchte über fünf meiner Meinung nach sehr wichtige Python-Features sprechen, von denen ich leider vorher nichts wusste.

1. Listeneinschluss - Schreiben eines kompakten Codes


Viele nennen solche Python-Mechanismen wie lambda , map und filter die Geheimnisse, die jeder Programmieranfänger lernen sollte. Und obwohl ich mir sicher bin, dass all dies wissenswert ist, habe ich in den meisten Situationen, in denen diese Tools angewendet werden können, eine unzureichende Flexibilität dieser Tools festgestellt. Infolgedessen sind sie keineswegs so nützlich, wie es den Anschein hat.

Lambda ist eine Methode zum Erstellen kleiner, einzeiliger Funktionen zur einmaligen Verwendung. Wenn eine Funktion mehrmals aufgerufen wird, wird die Leistung beeinträchtigt. Gleichzeitig wendet die map die Funktion auf alle Elemente der Liste an und der filter wählt aus einer bestimmten Menge von Elementen eine Teilmenge aus, die der vom Benutzer angegebenen Bedingung entspricht.

 add_func = lambda z: z ** 2 is_odd = lambda z: z%2 == 1 multiply = lambda x,y: x*y aList = list(range(10)) print(aList) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 

Listeneinschluss (Listenverständnis) ist ein kompaktes und praktisches Design, mit dem Listen aus anderen Listen mit flexiblen Ausdrücken und Bedingungen erstellt werden können. Diese Konstruktion wird mit eckigen Klammern beschrieben. Sie enthalten Ausdrücke oder Funktionen, die nur dann für jedes Element der Liste gelten, wenn dieses Element eine bestimmte Bedingung erfüllt. Listeneinschluss kann eine mehrstufige Struktur sein, die verschachtelte Blöcke enthält. Auf diese Weise können Sie verschachtelte Listen verarbeiten, was wesentlich flexibler ist als die Verwendung von map und filter .

Hier ist die Syntax für die Aufnahme von Listen:

 [ expression(x) for x in aList if optional_condition(x) ] 

Hier ist ein Beispiel:

 print(list(map(add_func, aList))) print([x ** 2 for x in aList]) # [0, 1, 4, 9, 16, 25, 36, 49, 64, 81] # [0, 1, 4, 9, 16, 25, 36, 49, 64, 81] print(list(filter(is_odd, aList))) print([x for x in aList if x%2 == 1]) # [1, 3, 5, 7, 9] # [1, 3, 5, 7, 9] 

2. Mit Listen arbeiten - Zirkellisten


In Python können Sie beim Arbeiten mit Listen negative Indizes verwenden. Der folgende Vergleich ist richtig:

 aList[-1] == aList[len(aList)-1] 

Dies ermöglicht es beispielsweise, das zweite Element mit dem aList[-2] vom Ende der Liste aList[-2] . Andere ähnliche Ausführungen sind möglich.

Außerdem können Sie einen Ausschnitt aus der Liste erhalten:

 aList[start:end:step] 

Hier ist das Anfangselement der Liste im resultierenden Slice enthalten, und das letzte Element ist nicht enthalten. Angenommen, die Liste sieht folgendermaßen aus:

 aList = [1, 2, 3, 4, 5, 6, 7, 8, 9] 

Das aList[2:5] sieht aus wie [2, 3, 4] . Außerdem können Sie die Liste mit dem aList[::-1] "spiegeln". In unserem Fall ergibt dies [9, 8, 7, 6, 5, 4, 3, 2, 1] . Ich finde diese Lösung für die "Flip" -Aufgabe der Liste sehr visuell und erfolgreich.

Sie können die Liste auch entpacken, indem Sie die darin gespeicherten Werte in separate Variablen einfügen. Oder - Zerlegen der Werte in separate Variablen und neue Listen mit einem Sternchen:

 a, b, c, d = aList[0:4] print(f'a = {a}, b = {b}, c = {c}, d = {d}') # a = 0, b = 1, c = 2, d = 3 a, *b, c, d = aList print(f'a = {a}, b = {b}, c = {c}, d = {d}') # a = 0, b = [1, 2, 3, 4, 5, 6, 7], c = 8, d = 9 

3. Zip- und Aufzählungsfunktionen - Erstellen leistungsfähiger for-Schleifen


Die zip Funktion erstellt einen Iterator, der die Elemente mehrerer Listen kombiniert. Dies ermöglicht das parallele Durchsuchen von Listen in for Schleifen und das parallele Sortieren. Mit dem Operator * können Sie die kombinierten Elemente in den normalen Zustand zurückversetzen.

Hier ist ein Beispiel für die Arbeit mit der zip Funktion:

 numList = [0, 1, 2] engList = ['zero', 'one', 'two'] espList = ['cero', 'uno', 'dos'] print(list(zip(numList, engList, espList))) # [(0, 'zero', 'cero'), (1, 'one', 'uno'), (2, 'two', 'dos')] for num, eng, esp in zip(numList, engList, espList):    print(f'{num} is {eng} in English and {esp} in Spanish.') # 0 is zero in English and cero in Spanish. # 1 is one in English and uno in Spanish. # 2 is two in English and dos in Spanish. 

Aber so können Sie die Listen in den normalen Zustand zurückversetzen:

 Eng = list(zip(engList, espList, numList)) Eng.sort() #   engList a, b, c = zip(*Eng) print(a) print(b) print(c) # ('one', 'two', 'zero') # ('uno', 'dos', 'cero') # (1, 2, 0) 

Die enumerate mag auf den ersten Blick sehr kompliziert aussehen, aber wenn Sie damit umgehen, stellt sich heraus, dass sie in vielen Fällen nützlich sein kann. Dies ist ein automatischer Zähler, der häufig for Schleifen verwendet wird. Außerdem ist es in solchen Zyklen nicht erforderlich, eine Zählervariable mit Konstruktionen wie counter = 0 und counter += 1 zu erstellen und zu inkrementieren.

Die Funktionen zip und enumerate sind zwei der leistungsstärksten Werkzeuge, die beim Konstruieren for Schleifen verwendet werden:

 upperCase = ['A', 'B', 'C', 'D', 'E', 'F'] lowerCase = ['a', 'b', 'c', 'd', 'e', 'f'] for i, (upper, lower) in enumerate(zip(upperCase, lowerCase), 1):    print(f'{i}: {upper} and {lower}.') # 1: A and a. # 2: B and b. # 3: C and c. # 4: D and d. # 5: E and e. # 6: F and f. 

4. Generatoren - effiziente Speichernutzung


Generatoren werden in Fällen verwendet, in denen bestimmte Berechnungen durchgeführt werden müssen, die zum Auftreten einer großen Anzahl von Ergebnissen führen. Gleichzeitig muss jedoch die gleichzeitige Zuweisung von Speicher für die Speicherung aller dieser Ergebnisse vermieden werden. Mit anderen Worten, Generatoren geben bestimmte Werte „on the fly“ aus. Sie speichern jedoch nicht die zuvor von ihnen gefundenen Werte. Infolgedessen wird der Speicher sparsam genutzt.

Generatoren werden häufig zum Lesen großer Dateien oder zum Erstellen unendlicher Sequenzen mit dem Schlüsselwort yield . Ich finde es oft angebracht, sie in meinen Forschungsprojekten zu verwenden.

 def gen(n):  #     ,   >= n    while True:        yield n        n += 1       G = gen(3)   #   3 print(next(G)) # 3 print(next(G)) # 4 print(next(G)) # 5 print(next(G)) # 6 

5. Virtuelle Umgebung - Code-Isolation


Wenn Sie nur eine Idee aus diesem Artikel auswählen könnten, an die Sie sich erinnern könnten, dann würde ich Sie über diejenige informieren, über die wir in diesem Abschnitt sprechen werden. Wir sprechen über virtuelle Umgebungen (virtuelle Umgebung).

Python-Anwendungen verwenden oft viele verschiedene Pakete. Sie wurden von verschiedenen Entwicklern erstellt und unterscheiden sich in komplexen Abhängigkeiten. In einer bestimmten Anwendung kann eine bestimmte Version einer bestimmten Bibliothek verwendet werden. Eine andere Version für eine solche Anwendung funktioniert jedoch nicht. Was aber, wenn mehrere Anwendungen unterschiedliche Versionen derselben Bibliothek verwenden? Dies ist eine schwierige Frage, die uns auf die Idee bringt, dass es keine universelle Umgebung gibt, in der Pakete installiert sind, die für absolut alle Anwendungen geeignet sind. Die Antwort auf diese Frage kann als Verwendung virtueller Umgebungen bezeichnet werden.

So erstellen Sie voneinander isolierte virtuelle Umgebungen:

 conda create -n venv pip python=3.7 #   python source activate venv ... source deactivate 

Zusammenfassung


In diesem Artikel haben wir 5 nützliche Python-Funktionen behandelt. Es ging nämlich um Listeneinschlüsse, um zyklische Listen, um zip und enumerate , um Generatoren und virtuelle Umgebungen. Wir hoffen, dass diese Funktionen hilfreich sind.

Sehr geehrte Leser! Wenn Sie einem unerfahrenen Programmierer nur eine Python-Funktion mitteilen könnten, welche würden Sie wählen?

Source: https://habr.com/ru/post/de482458/


All Articles