2017-10-30 9 views
1

Ich habe ein ganz einfaches Programm codiert, aber ich werde ein Skript kurz genug buchen den Hauptpunkt der Frage zu erreichen:Aufruf einer Funktion in einem anderen

def hello(): 
    print("hello") 
    good_morning() 

def good_morning(): 
    print("good morning") 
hello() 

Ich habe eine Frage zu Funktionen. Laut einem Python-Handbuch (geschrieben von Allan Downey) wird Python hello() so ausführen, als wäre es im ersten Teil des Programms. Wie kann das funktionieren, wenn der Aufruf vor der Definition der Funktion ist?

+3

Wenn der Anruf vorher ist, dann funktioniert es nicht. –

+0

Tippfehler: 'goodmorning' sollte' good_morning' sein. – Barmar

+0

Danke! Also ist die Anleitung nicht korrekt? –

Antwort

0

Wenn Ihr Code wie dieser ist dann arbeiten wird es nicht:

def hello(): 
    print("hello") 
    good_morning() 

hello() 

def good_morning(): 
    print("good morning") 

>> NameError: name 'good_morning' is not defined 

aber da der Code für beide Methoden können zusammengestellt werden, bevor sie die hello() Methode aufruft, wird der Code kompilieren und ausführen:

def hello(): 
    print("hello") 
    good_morning() 

def good_morning(): 
    print("good morning") 

hello() 

>> Hello 
>> good morning 
0

Wie Sie in diesem Editor Online https://repl.it/N2qt/0

die Compiler sehen sagen Sie "undefined variable goodmorning()" (Sie einen Tippfehler haben, überprüfen Sie den Namen s gut geschrieben), und das ist, weil die Reihenfolge der Definition der Funktion in Python Angelegenheiten, so der Code, zu arbeiten, sollte wie folgt neu geschrieben werden, um nicht funktioniert:

def hello(): 
    print("hello") 
    good_morning() 

hello() 

def good_morning(): 
    print("good morning") 

diese Bremsen mit:

hello 
Traceback (most recent call last): 
    File "python", line 8, in <module> 
    File "python", line 3, in hello 
NameError: name 'good_morning' is not defined 

und der ursprüngliche Code (gut geschrieben) funktioniert:

def hello(): 
    print("hello") 
    good_morning() 

def good_morning(): 
    print("good morning") 

hello() 

hello 
good morning 
1

Anweisungen werden in der Reihenfolge ausgeführt. Wenn Sie hello() ausführen, haben Sie die Anweisung ausgeführt, die good_morning definiert. Dort, wenn hello() versucht, good_morning() aufzurufen, ist es erfolgreich, weil die Funktion definiert ist.

Mit anderen Worten hat die Funktion vor der Funktion definiert werden, dass es , nicht vor der Funktion aufgerufen verwendet, ist, dass es definiert verwendet wird.

Verwandte Themen