No creo que realmente esté preguntando por lambdas, pero funciones en línea.
Esto es genuinamente una de las limitaciones más molestas de Python: no se puede definir una función (una función real, no solo una expresión) en línea; tienes que darle un nombre. Esto es muy frustrante, ya que todos los otros lenguajes de scripting modernos hacen esto y a menudo es muy doloroso tener que mover funciones fuera de línea. También es frustrante porque tengo la sensación de que el bytecode de Python puede representar esto trivialmente, es solo la sintaxis del lenguaje que no puede.
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();
Ruby:
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"]()
Tenga en cuenta que JavaScript y Lua no tienen lambdas: no tienen ninguna razón para existir, ya que las funciones en línea los cubren de una manera mucho más natural y general.
Probablemente calificaría esto como la limitación de Python más molesta del día a día.
Lambdas son expresiones * por definición *. –