Heim > Artikel > Backend-Entwicklung > 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:
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:
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)
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)
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)
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!