История изменений
Исправление byko3y, (текущая версия) :
Кстати, если я правильно понял, это также может быть использовано и как switch case, который некоторые так хотели завезти в Python
Да, я вечно забываю что в питоне нет даже switch
Во-первых:
try:
{
1: lambda: print("first"),
2: lambda: print("second"),
}[val]()
except KeyError:
print("wrong")
Во-вторых, кто «хотели»? Я пишу уже почти год на JS, в котором «switch» есть с ES5.1, но у меня ни разу не возникала мысль «не, тут нужно вместо условий switch использовать». Конструкции «switch» нет места ни в питоне, ни в JS, потому что смысл ее (быстрый выбор из большого числа условий) потерян. Даже если не брать в рассмотрение оптимизацию, то в C/C++/Java/etc у switch есть функция, как у единственного удобного механизма записи большого низкоуровневого ветвления. Ничего этого не нужно в питоне и JS, где есть высокоуровневые базовые типы, где можно создавать лямбды, где можно засунуть обработчики в числовой/ассоциативный массив, причем, сделать это в одном месте, без необходимости объявлять функции отдельно и как-то передавать в них параметры.
Я соглашусь разве что с тем, что в питоне лямбды калечные с рождения, из-за чего их применение сильно ограничено. И в итоге разговор идет не о том, как починить лямбды чтобы язык наконец стал чем-то похожим на лисп по удобству, а о том, как ничего не трогать и добавить очередной слой мусора в язык.
Исходная версия byko3y, :
Кстати, если я правильно понял, это также может быть использовано и как switch case, который некоторые так хотели завезти в Python
Да, я вечно забываю что в питоне нет даже switch
Во-первых:
try:
{
1: lambda: print("first"),
2: lambda: print("second"),
}[val]()
except KeyError:
print("wrong")
Во-вторых, кто «хотели»? Я пишу уже почти год на JS, в котором «switch» есть с ES5.1, но у меня ни разу не возникала мысль «не, тут нужно вместо условий switch использовать». Конструкции «switch» нет места ни в питоне, ни в JS, потому что смысл ее (быстрый выбор из большого числа условий) потерян. Даже если не брать в рассмотерние оптимизацию, то у switch есть функция, как у единственного удобного механизма записи большого низкоуровневого ветвления. Ничего этого не нужно в питоне и JS, где можно создавать лямбды, где можно засунуть обработчики в числовой/ассоциативный массив, причем, сделать это в одном месте, без необходимости объявлять функции отдельно и как-то передавать в них параметры.
Я соглашусь разве что с тем, что в питоне лямбды калечные с рождения, из-за чего их применение сильно ограничено. И в итоге разговор идет не о том, как починить лямбды чтобы язык наконец стал чем-то похожим на лисп по удобству, а о том, как ничего не трогать и добавить очередной слой мусора в язык.