有没有办法消除在 Python 表达式中多次出现的同一 lambda 表达式的多次计算?
Is there a way to eliminate multiple computations of same lambda expression occurring multiple times in a Python expression?
我试图用众所周知的三角形面积公式来举例说明 python lambda 表达式。给定三个边 a、b、c 和半周长 s 为(a+b+c)/2,面积为(s * (s-a) * (s-b) * (s-c ))。所以,我写了 python 代码:
s = lambda a, b, c : (a + b + c)/2 #Line 1
area_tri = lambda a, b, c : (s(a,b,c) * (s(a,b,c)-a) * (s(a,b,c)-b) * \
(s(a,b,c)*c)) ** 0.5
area_tri(1, 2, 3)
计算area_tri的语句要计算s(a, b, c)四次。所以,我想我是否可以这样写:
semi = s
在第 1 行之后,将 s(a,b,c) 中的每个 semi 替换为 area_tri计算语句。但是,它会产生 a、b 和 c 是未知符号的错误。有无错误的替代方案吗?
python3.8后可以使用海象算子:=
:
area_tri = lambda a, b, c: ((semi := s(a, b, c)) * (semi - a) * (semi - b) * (semi - c)) ** 0.5
对于早期版本,最好的方法是定义一个函数:
def area_tri(a, b, c):
semi = s(a, b, c)
return (semi * (semi - a) * (semi - b) * (semi - c)) ** 0.5
我试图用众所周知的三角形面积公式来举例说明 python lambda 表达式。给定三个边 a、b、c 和半周长 s 为(a+b+c)/2,面积为(s * (s-a) * (s-b) * (s-c ))。所以,我写了 python 代码:
s = lambda a, b, c : (a + b + c)/2 #Line 1
area_tri = lambda a, b, c : (s(a,b,c) * (s(a,b,c)-a) * (s(a,b,c)-b) * \
(s(a,b,c)*c)) ** 0.5
area_tri(1, 2, 3)
计算area_tri的语句要计算s(a, b, c)四次。所以,我想我是否可以这样写:
semi = s
在第 1 行之后,将 s(a,b,c) 中的每个 semi 替换为 area_tri计算语句。但是,它会产生 a、b 和 c 是未知符号的错误。有无错误的替代方案吗?
python3.8后可以使用海象算子:=
:
area_tri = lambda a, b, c: ((semi := s(a, b, c)) * (semi - a) * (semi - b) * (semi - c)) ** 0.5
对于早期版本,最好的方法是定义一个函数:
def area_tri(a, b, c):
semi = s(a, b, c)
return (semi * (semi - a) * (semi - b) * (semi - c)) ** 0.5