2017-12-08 3 views
-3
def my_test(some_function): 

    def wrapper(): 

     num = 10 

     if num == 10: 
      print("Yes") 
     else: 
      print("No") 

     some_function() 

     print("Something is happening after some_function() is called") 

    return wrapper 


def just_some_function(): 
    print("Filler text") 

my_test(just_some_function) 

genannt Als ich dieses Skript ausführen, sollte es zeigen:Python-Funktion nichts zurückkehrt, wenn

Ja

Fülltext

Etwas nach some_function geschieht() aufgerufen wird

seit my_test(just_some_function) Anrufe my_test, geht durch die Wrapper-Funktion, prüft ob num == 10, druckt "Ja", geht dann zu just_some_function() (da some_function ist die "Variable" für die Funktion my_test()), druckt "Füllertext" und endet schließlich mit dem Ausdruck "Etwas passiert nachdem some_function() aufgerufen wurde. " Aber nichts passiert in der Konsole, wenn ich das Skript ausführe.

+2

yeah, aber du solltest 'wrapper()' zurückgeben oder das Ergebnis wie 'my_test (just_some_function)()' –

+0

nennen Sieht aus, als würdest du über Dekorateure nachdenken. – quamrana

Antwort

1

my_test ist eine Funktion höherer Ordnung; es wird nur eine andere Funktion zurückgegeben, in diesem Fall wrapper. Sie müssen tatsächlich die zurückgegeben Funktion aufrufen:

my_test(just_some_function)() 

Hinweis, andere als zu Demonstrationszwecken - oder als Dekorationsmaler - das ist ein ziemlich sinnlos Weg, um Code zu schreiben.

Verwandte Themen