2016-07-03 28 views
2

In Swift wir eine Funktion mit einem Abschluss-Block wie folgt schreiben kann:Was entspricht einem Swift-Vervollständigungsblock in Python?

func thisNeedsToFinishBeforeWeCanDoTheNextStep(completion:() ->()) { 
    print("The quick brown fox") 
    completion() 
} 

Und dann, wenn wir es nennen, können wir etwas setzen innerhalb dieses Blocks auszuführen, sobald es fertig ist, es ist Prozess:

func thisFunctionNeedsToExecuteSecond() { 
    print("jumped over the lazy dog") 
} 

Was ist das Äquivalent in Python?

+2

Python-Funktionen werden nur in der Reihenfolge ausgeführt. –

+0

Der gesamte Code wird der Reihe nach ausgeführt. Selbst wenn es sich um einen API-Aufruf handelt, wird nicht in die nächste Zeile fortgefahren, bis die vorherige Funktion eine Antwort erhalten hat. Und was, wenn ich möchte, dass eine Funktion mit der Ausführung beginnt, aber das Programm weiterlaufen soll, während es funktioniert, sobald diese Funktion beendet ist, möchte ich, dass sie etwas anderes ausführt? –

+0

Wenn Sie kein Multithreading verwenden, werden die Funktionen der Reihe nach ausgeführt. –

Antwort

3

Python betrachtet Funktionen als Objekte, was bedeutet, dass Sie sie weitergeben können (wie in Swift, obwohl ich mit den Implementierungsdetails in Swift weniger vertraut bin). Sie können natürlich keinen Typ im Parameter angeben, da Sie dies in Python mit nichts tun können, aber das ist in Ordnung. Die Umsetzung würde wie folgt aussehen:

def do_first(completion): 
    print("The quick brown fox ") 
    completion() 

def do_second(): 
    print("jumped over the lazy dog.") 

Und dann, sie zu benutzen:

do_first(do_second) 

Sofern Sie asynchronen Code verwenden, vor dem completion() Anruf in der ersten Funktion, werden die Linien der Reihe nach ausgeführt werden, wie erwartet.