python表达式中的临时变量

ffe*_*rri 2 python functional-programming temporary

一些(很多?所有?)函数式编程语言(如StandardMLHaskell)在表单let ... in ...中有一种表达式,可以使用表达式本身的范围创建临时变量.

例: let a=b*c in a*(a+1)

似乎在Python中没有类似于此的表达式构造.

动机:

例如,lambda函数体必须是(一)表达式.不是两个表达.不是声明(赋值是声明而不是表达式).

此外,在编写函数式表达式和python 中的一般单行程序时,事情很容易变得混乱(参见Python 2列表理解和评估的回答).

这种结构的要点是避免重复(有时会导致重新计算),例如,l[:l.index(a)]+l[l.index(a)+1:]而不是假设let i=l.index(a) in l[:i]+l[i+1:]


我们如何在python2/python3中实现类似的语言功能?

Ism*_*awi 6

这不是真正的惯用代码,但对于单个表达式,您可以使用您立即调用的lambdas.您的示例如下所示:

>>> b, c = 2, 3
>>> (lambda a: a * (a + 1))(b * c)
42
Run Code Online (Sandbox Code Playgroud)

如果这有助于提高可读性,您也可以使用关键字参数来编写:

>>> (lambda a: a * (a + 1))(a=b * c)
42
Run Code Online (Sandbox Code Playgroud)