Некоторые языки программирования функционального программирования (многие? Все?), Такие как StandardML и Haskell, имеют тип выражения в форме let ... in ...
, где можно создавать временные переменные с областью действия самого выражения.Временные переменные в выражении python
Пример: let a=b*c in a*(a+1)
Похоже, что в Python есть никакого выражения не построить похожее на это.
Мотивация:
Например, тело lambda
функции должны быть (один) выражение. Не два выражения. Не утверждение (присваивание - это утверждение, а не выражение).
Кроме того, при написании функциональных выражений и вообще однострочниками в питона, все может стать грязным довольно легко (см my answer в Python 2 list comprehension and eval).
Точка такой конструкции, чтобы избежать повторений (который иногда приводит к повторным вычислениям), например l[:l.index(a)]+l[l.index(a)+1:]
вместо гипотетического let i=l.index(a) in l[:i]+l[i+1:]
Как можно достичь аналогичной функции языка в python2/python3?
Что не так с 'a = b * c; а * (а + 1) '? Разумеется, он будет иметь больший объем, чем просто выражение, но это не должно быть проблемой, если ваш код достаточно структурирован и ваши переменные разумно названы. – TigerhawkT3
@ TigerhawkT3 две вещи «неправильны» с этим: 1) это на самом деле два выражения, а не одно.) Scope не является выражением «a * (a + 1)», но область, в которой выражение содержится в – fferri
И теперь я не понимаю, что не так с этими двумя вещами. :(Я не вижу какой-либо ловушки с двумя выражениями вместо одного, и я признал большую область видимости, но заметил, что это не должно вызывать проблем. Программисты Python очень часто сохраняют ссылки на переменные, часто с вполне приемлемыми результатами. – TigerhawkT3