Heim  >  Artikel  >  Backend-Entwicklung  >  Drei Optionen |. Verzichten Sie auf die for-Schleife und machen Sie Python-Code pythonischer!

Drei Optionen |. Verzichten Sie auf die for-Schleife und machen Sie Python-Code pythonischer!

WBOY
WBOYnach vorne
2023-04-12 20:46:041347Durchsuche

Drei Optionen |. Verzichten Sie auf die for-Schleife und machen Sie Python-Code pythonischer!

Warum sollten Sie sich die Herausforderung stellen, keine for-Schleife in Ihren Code zu schreiben? Denn dies zwingt Sie dazu, den Umgang mit fortgeschrittenerer und idiomatischerer Syntax oder Bibliotheken zu erlernen. Der Artikel verwendet Python als Beispiel, um über eine Menge Syntax zu sprechen, die jeder im Code anderer Leute gesehen hat, sie aber selbst selten verwendet.

Es ist schon eine Weile her, seit ich angefangen habe, die erstaunlichen Sprachfunktionen in Python zu erkunden. Am Anfang stellte ich mich selbst einer Herausforderung mit dem Ziel, mehr Funktionen der Python-Sprache zu üben, als ich Programmiererfahrung mit anderen Programmiersprachen 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 vorstellen.

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:

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. 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)

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]

Wenn Sie nur über die Elemente im Array iterieren möchten, ist das ebenfalls der Fall möglich Verwenden Sie den gleichen Code wie Generator Expression. result = (do_something_with(item) for item in item_list)

2. Funktion

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

doubled_list = map(lambda x: x * 2, old_list)

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

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

3.Funktionen oder Generatoren extrahieren

Die beiden oben genannten Methoden eignen sich für eine einfachere Handhabung 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)

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]

Was passiert, wenn Sie zu einer verschachtelten Funktion wechseln:

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

Wechseln Sie zum Listenverständnis, um so etwas zu erreichen:

results = [(i, j)
for i in range(10)
for j in range(i)]

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]

Verwenden Sie Generatoren, 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))

Leser fragen sich möglicherweise: „Warten Sie! Sie haben eine for-Schleife im Generator verwendet, Betrug! Keine Sorge, schauen Sie sich den Code unten an.

Schreiben Sie ihn nicht selbst. itertools wird helfen.“ 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:

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 vonDrei Optionen |. Verzichten Sie auf die for-Schleife und machen Sie Python-Code pythonischer!. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:51cto.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen