2017-10-13 4 views
1

Ich bin ziemlich neu in der Python-Programmiersprache, ich bin auf der Suche nach etwas mehr Verständnis, wie das Diktat Verständnis funktioniert (wenn das ist eigentlich, was es in erster Linie ist !)Python Wörterbuch Verständnis vor der Ausführung Methoden

return { 
    'hello': method_call_1() 
    'goodbye': method_call_2() 
    'hello2': method_call_3() 
}['hello'] 

Blick auf diese, würde ich davon ausgehen, dass method_call_1() denn, dass das Wörterbuch Schlüssel der Rückkehr sucht ist ausgeführt würden. Allerdings scheint es in meinem Programm, dass die anderen beiden Methoden ausgeführt werden (oder ich bekomme einen Fehler für das Fehlen ihrer Existenz) unabhängig davon, ob sie zurückgegeben werden oder nicht.

Ist dieses Standardverhalten? Meine einzige Annahme ist, dass der Python-Compiler die Methodenaufrufe vor der eigentlichen Verwendung vornimmt, anstatt nur die gewählte Methode auszuführen.

Aus der Spitze von meinem Kopf, ich wahrscheinlich um dies mit so etwas wie bekommen konnte:

x = return { 
    'hello': 'method_call_1' 
    'goodbye': 'method_call_2' 
    'hello2': 'method_call_3' 
}['hello'] 

x() 

Aber das scheint, wie es unpassend Praxis wäre, gibt es eine bessere Möglichkeit, um dies zu realisieren?

+0

Zuerst das Wörterbuch erstellen. Um es zu erstellen, müssen die Funktionen, die die Werte bereitstellen, ausgeführt werden. – Matthias

Antwort

2

Beim Erstellen des Diktats möchte Python die Ergebniswerte jedes Ausdrucks speichern, so dass jede Funktion, die Sie innerhalb des Diktats aufrufen, im Generierungsprozess und nicht beim Aufrufprozess ausgewertet wird.

Wenn Sie nur Funktionen speichern, um sie später aufzurufen, können Sie die Speicheradresse der Funktion speichern. Das heißt, der Name der Funktion ohne Klammern.

diese Weise können sie später asi nennen können Sie in der zweiten Codeblock zu tun versucht:

x = return { 
    'hello': method_call_1, 
    'goodbye': method_call_2, 
    'hello2': method_call_3, 
}['hello'] 

x() 
+0

Dies funktioniert, endete mit getattr, weil die Methode in einem Modul war, aber das war die allgemeine Implementierung. Vielen Dank! :) – user3062123

0

Der Python Compiler tatsächlich versucht, die Methoden auszuführen, da Sie sie (()) anrufen, so dass die Der Rückgabewert dieser Funktion wird dem Wert des Diktats zugewiesen.

können Sie etwas tun:

def func_1(): 
    return 1 
def func_2(): 
    return func_1 
def func_3(): 
    return func_1() 

def select_funct(i): 

    selection = {1: func_1, 
       2: func_2, 
       3: func_3(), 
       } 
    return selection[i] 

print(select_funct(1)()) 

print(select_funct(2)()()) 

print(select_funct(3)) 
Verwandte Themen