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:
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.
Sie können vorhandene Tools verwenden, um die for-Schleife zu ersetzen
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]
Ähnlich, wenn Sie Wenn Sie nur die Elemente von
im Array durchlaufen möchten, können Sie auch denselben Code-Generatorausdruck verwenden.
result = (do_something_with(item) for item in item_list)
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)
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)
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
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)
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 zu List Comprehension und die Implementierung sieht folgendermaßen aus:
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]
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))
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))
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 schreibenDas 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!