Je ne pense pas que vous parlez vraiment de lambdas, mais de fonctions inline.
C'est vraiment l'une des limitations sérieusement ennuyeuses de Python : vous ne pouvez pas définir une fonction (une vraie fonction, pas juste une expression) inline ; vous devez lui donner un nom. C'est très frustrant, car chaque autre langage de script moderne le fait et il est souvent très pénible de déplacer des fonctions hors ligne. C'est aussi frustrant car j'ai l'impression que le bytecode Python pourrait le représenter de manière triviale - c'est juste la syntaxe du langage qui ne peut pas.
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"]()
Remarquez que JavaScript et Lua n'ont pas de lambdas : ils n'ont aucune raison d'exister, car les fonctions inline les couvrent de manière beaucoup plus naturelle et générale.
Je classerais probablement cela comme la limitation la plus ennuyeuse de Python dans la vie de tous les jours.