2017-04-30 3 views
0

Ich fand einige Code, den ich in dieser Antwort https://stackoverflow.com/a/37401376/1727657 benötigt. Aber ich verstehe nicht, was next() tut in diesem Zusammenhang. Könnte jemand erklären?Wie funktioniert next() in diesem Python-Code

Hier ist ein kurzes Testskript, das ich gemacht habe, um es zu verstehen. Die Idee ist zu sehen, ob die Test-Zeichenkette txt irgendeine der Zeichenketten in myset enthält und wenn ja, welche. Es funktioniert, aber ich weiß nicht warum.

myset = ['one', 'two', 'three'] 
txt = 'A two dog night' 
match = next((x for x in myset if x in txt), False) 
if match: #if match is true (meaning something was found) 
    print match #then print what was found 
else: 
    print "not found" 

Meine nächste Frage wird sein, zu fragen, ob next() mir den Index match geben (oder muss ich find() auf txt tun müssen)?

+2

https://docs.python.org/3/library/functions.html#next – Grimmy

+1

Ich vermute, sie verwenden '' next'' hier, weil sie nur das erste Spiel wollen. Die Zeile könnte einfach "match = [x für x in myset, wenn x in txt]" gewesen sein, um alle Übereinstimmungen zu erhalten. – Grimmy

Antwort

1

Um zu erklären, wie nächste hier im Detail verwendet wird.

match = next((x for x in myset if x in txt), False) 

Dies wird das erste/nächste Wert zurück (in diesem Fall die tatsächliche Wort, das angepaßt) durch den Generator Ausdruck in dem ersten Argument übergeben erstellt. Wenn der Generatorausdruck leer ist, wird stattdessen False zurückgegeben.

Wer den Code geschrieben hat, war wahrscheinlich nur an der ersten Übereinstimmung interessiert, also wurde next verwendet.

Wir konnten einfach nutzen:

matches = [x for x in myset if x in txt] 

und nur len verwenden, um die Anzahl der Treffer zu bestimmen.

Um eine gewisse Ebene Nutzung von next zeigen:

generator = (x for x in myset) 
print generator 
print next(generator) 
print next(generator) 
print next(generator) 

Ausgänge:

<generator object <genexpr> at 0x100720b90> 
one 
two 
three 

Das obige Beispiel eine StopIteration Ausnahme auslösen, wenn wir versuchen, next zu rufen, wenn die Liste/Generator, weil leer Wir verwenden nicht das zweite Argument, um zu überschreiben, was zurückgegeben werden soll, wenn der Generator leer ist.

Was next wirklich unter der Haube tut, heißt die __next__() Methode des Typs. Dies ist wichtig, um den Unterricht zu behalten.

Wenn etwas unklar ist, zögern Sie nicht zu empfehlen und ich werde es ausarbeiten. Denken Sie auch daran, dass print Ihr Freund ist, wenn Sie nicht verstehen, was vor sich geht.

Verwandte Themen