Heim > Backend-Entwicklung > Python-Tutorial > Herausforderung: Alternativen zur Implementierung von Schleifen in Python

Herausforderung: Alternativen zur Implementierung von Schleifen in Python

WBOY
Freigeben: 2023-05-07 09:28:07
nach vorne
1191 Leute haben es durchsucht

挑战不再写Python for 循环

Es ist schon eine Weile her, seit ich angefangen habe, die erstaunlichen Sprachfunktionen in Python zu erkunden. Am Anfang stellte ich mich einer Herausforderung mit dem Ziel, mehr Funktionen der Python-Sprache zu üben, als ich mit anderen Programmiersprachen Programmiererfahrung gehabt hätte. Das macht die Sache immer interessanter! Der Code wird immer prägnanter und der Code sieht strukturierter und standardisierter aus. Ich werde diese Vorteile im Folgenden beschreiben.

Die for-Schleife wird normalerweise in den folgenden Verwendungsszenarien verwendet:

  • Um einige Informationen in einer Sequenz zu extrahieren.
  • Generieren Sie eine Sequenz aus einer anderen.
  • Für mich zu schreiben ist zur Gewohnheit geworden.

Glücklicherweise verfügt Python bereits über viele Tools, die Ihnen dabei helfen. Sie müssen nur Ihre Meinung ändern und aus einer anderen Perspektive darüber nachdenken.

Welche Vorteile haben Sie, wenn Sie das Schreiben von for-Schleifen vermeiden:

  • Weniger Code
  • Bessere Lesbarkeit des Codes
  • Weniger Einrückungen (macht für Python immer noch Sinn)

Werfen wir einen Blick auf die Codestruktur unten:

# 1
with ...:
 for ...:
 if ...:
 try:
 except:
 else:
Nach dem Login kopieren

In diesem Beispiel haben wir es mit mehreren Ebenen verschachtelten Codes zu tun, der schwer zu lesen ist. In diesem Beispiel werden mehrere Ebenen verschachtelten Codes verwendet. Was ich in diesem Code gefunden habe, war die wahllose Verwendung von Einrückungen, um Verwaltungslogik (mit, Try-Except) und Geschäftslogik (für, wenn) zu vermischen. Wenn Sie sich an die Konvention halten, Einrückungen nur für Verwaltungslogik zu verwenden, sollte die Kerngeschäftslogik sofort entfernt werden.

  • „Flache Strukturen sind besser als verschachtelte Strukturen“ – The Zen of Python

Sie können vorhandene Tools verwenden, um die for-Schleife zu ersetzen

1. Listenverständnis / Generatorausdruck

Schauen wir uns ein einfaches Beispiel an. Wenn Sie ein Array in ein anderes konvertieren möchten:

result = []
for item in item_list:
 new_item = do_something_with(item)
 result.append(item)
Nach dem Login kopieren

Wenn Sie MapReduce mögen, können Sie auch Map oder List Comprehension in Python verwenden:

result = [do_something_with(item) for item in item_list]

Ähnlich, wenn Sie Wenn Sie nur die Elemente von

Nach dem Login kopieren

im Array durchlaufen möchten, können Sie auch denselben Code-Generatorausdruck verwenden.

result = (do_something_with(item) for item in item_list)
Nach dem Login kopieren

2. Funktion

Wenn Sie ein Array einem anderen Array zuordnen möchten, rufen Sie einfach die Map-Funktion auf, um dieses Problem auf eine fortgeschrittenere und praktischere Programmiermethode zu lösen.

doubled_list = map(lambda x: x * 2, old_list)
Nach dem Login kopieren

Wenn Sie eine Sequenz auf eine einzelne reduzieren möchten, verwenden Sie Reduce

from functools import reduce
summation = reduce(lambda x, y: x + y, numbers)
Nach dem Login kopieren

Außerdem verwenden viele in Python integrierte Funktionen iterables:

>>> a = list(range(10))
>>> a
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> all(a)
False
>>> any(a)
True
>>> max(a)
9
>>> min(a)
0
>>> list(filter(bool, a))
[1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> set(a)
{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
>>> dict(zip(a,a))
{0: 0, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 7: 7, 8: 8, 9: 9}
>>> sorted(a, reverse=True)
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
>>> str(a)
'[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]'
>>> sum(a)
45
Nach dem Login kopieren

3. Funktionen oder Generatoren extrahieren

Die beiden oben genannten Methoden sind einfacher zu handhaben Logik. Wie wäre es mit komplexerer Logik? Als Programmierer schreiben wir Funktionen, um komplexe Geschäfte zu abstrahieren. Die gleiche Idee gilt hier. Wenn Sie so geschrieben haben:

results = []
for item in item_list:
 # setups
 # condition
 # processing
 # calculation
 results.append(result)
Nach dem Login kopieren

Offensichtlich fügen Sie einem Codeblock zu viel Verantwortung hinzu. Stattdessen schlage ich vor, dass Sie Folgendes tun:

def process_item(item):
 # setups
 # condition
 # processing
 # calculation
 return result
results = [process_item(item) for item in item_list]
Nach dem Login kopieren

Was passiert, wenn Sie zu einer verschachtelten Funktion wechseln

results = []
for i in range(10):
 for j in range(i):
 results.append((i, j))
Nach dem Login kopieren

Wechseln Sie zu List Comprehension und die Implementierung sieht folgendermaßen aus:

results = [(i, j)
for i in range(10)
for j in range(i)]
Nach dem Login kopieren

Wenn Ihr Codeblock einen internen Status aufzeichnen muss

# finding the max prior to the current item
a = [3, 4, 6, 2, 1, 9, 0, 7, 5, 8]
results = []
current_max = 0
for i in a:
 current_max = max(i, current_max)
 results.append(current_max)
# results = [3, 4, 6, 6, 6, 9, 9, 9, 9, 9]
Nach dem Login kopieren

Wir verwenden Generator Um dies zu erreichen:

def max_generator(numbers):
 current_max = 0
 for i in numbers:
 current_max = max(i, current_max)
 yield current_max
a = [3, 4, 6, 2, 1, 9, 0, 7, 5, 8]
results = list(max_generator(a))
Nach dem Login kopieren
  • Leser fragen sich vielleicht: „Warten Sie! Sie haben eine for-Schleife im Generator verwendet, Betrug! Keine Sorge, schauen Sie sich den folgenden Code noch einmal an.

Schreiben Sie ihn nicht selbst. itertools wird es tun.“ Ich glaube, dass die Implementierung dieses Moduls in den meisten Szenarien Ihre ursprüngliche for-Schleife ersetzen kann. Das letzte Beispiel kann beispielsweise wie folgt umgeschrieben werden:

from itertools import accumulate
a = [3, 4, 6, 2, 1, 9, 0, 7, 5, 8]
resutls = list(accumulate(a, max))
Nach dem Login kopieren

Wenn Sie außerdem die kombinierte Sequenz wiederholen möchten Sie müssen Produkt(), Permutationen() und Kombinationen() verwenden.

Fazit

In den meisten Fällen müssen Sie keine For-Schleifen schreiben
  • Sie sollten das Schreiben von For-Schleifen vermeiden, da dies den Code besser lesbar macht . Sex

Das obige ist der detaillierte Inhalt vonHerausforderung: Alternativen zur Implementierung von Schleifen in Python. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:51cto.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage