Не думаю, что вы действительно спрашиваете о лямбдах, но встроенные функции .
Это действительно одно из серьезных раздражающих ограничений Python: вы не можете определить встроенную функцию (реальную функцию, а не просто выражение); Вы должны дать ему имя. Это очень расстраивает, так как любой другой современный язык сценариев делает это, и часто бывает очень больно перемещать функции вне очереди. Это также расстраивает, потому что я чувствую, что байт-код Python может представить это тривиально - это просто синтаксис языка, который не может.
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"]()
Обратите внимание, что в JavaScript и Lua нет лямбд: у них нет причин существовать, поскольку встроенные функции охватывают их гораздо более естественным и общим способом.
Вероятно, я бы оценил это как самое раздражающее ежедневное ограничение Python.