Ich glaube nicht, dass Sie wirklich nach Lambdas fragen, aber Inline-Funktionen.
Dies ist wirklich eine von Pythons ernsthaft lästigen Einschränkungen: Sie können eine Funktion (eine echte Funktion, nicht nur einen Ausdruck) inline definieren; du musst ihm einen Namen geben. Dies ist sehr frustrierend, da jede andere moderne Skriptsprache dies tut und es oft sehr schmerzhaft ist, Funktionen aus der Reihe zu bringen. Es ist auch frustrierend, weil ich das Gefühl habe, dass Python-Bytecode das trivial darstellen kann - es ist nur die Sprachsyntax, die das nicht kann.
Javascript:
responses = {
"resp1": {
"start": function() { ... },
"stop": function() { ... },
},
"resp2": {
"start": function() { ... },
"stop": function() { ... },
},
...
}
responses["resp1"]["start"]();
Lua:
responses = {
resp1 = {
start = function() ... end;
end = function() ... end;
};
...
}
responses.resp1.start();
Rubin:
responses = {
"resp1" => {
"start" => lambda { },
"stop" => lambda { },
},
}
responses["resp1"]["start"].call
Python:
def resp1_start():
pass
def resp1_stop():
pass
responses = {
"resp1": {
"start": resp1_start,
"stop": resp1_stop,
},
}
responses["resp1"]["start"]()
Beachten Sie, dass JavaScript und Lua keine lambdas haben: Sie haben keinen Grund zu existieren, da Inline-Funktionen sie viel natürlicher und allgemeiner abdecken.
Ich würde das wahrscheinlich als die nervigste tägliche Python-Einschränkung bezeichnen.
Lambdas sind Ausdrücke * per Definition *. –