我听说可以使用lambda替换if
语句。
这在Python中可行吗?如果是这样,怎么样?
答案 0 :(得分:6)
也许你指的是这样的东西(Lambda calculus)?
If = lambda test, x, y: test(x, y)
True = lambda x, y: x
False = lambda x, y: y
你可以使用...
# I guess you have to convert them sometimes... oh well
C = lambda b: [False, True][b]
x = If(C(2 > 3), "Greater", "Less")
print(x)
# "Less"
但现在事情开始分崩离析了......
If(C(2 > 3), print("Greater"), print("Less"))
# Invalid syntax unless you use
# from __future__ import print_function
# And if you do, it prints both!
# (Because python has eager evaluation)
# So we could do
True = lambda x, y: x()
False = lambda x, y: y()
# And then
If(C(2 > 3), lambda:print("Greater"), lambda:print("Less"))
# "Less"
所以,不那么漂亮或有用。但它确实有效。
答案 1 :(得分:4)
和其他人一样,我不确定你在问什么,但我愿意猜测。
我有时会以一种hacky方式使用lambdas来处理API调用的结果。
比方说,例如,API调用结果的元素应该是一个数字字符串,我想要它作为整数,但偶尔会返回其他内容。
如果字符串由数字组成,则可以定义lambda将字符串转换为整数:
lambda x: x and x.isdigit() and int(x) or None
这避免使用if
语句,但不是因为lambda
,您可以像函数一样:
def f(x):
return x and x.isdigit() and int(x) or None
<强>更新强>
保罗·麦克奎尔(Paul McGuire)提供的不那么错误的黑客攻击:
lambda x: int(x) if x and x.isdigit() else None
即。当int('0')
返回相当于False
时,lambda可能会在您想要None
0
而让您感到惊讶
答案 2 :(得分:3)
我可能会认真对待,但我想这意味着:
filter(lambda x: x > 0, list_of_values)
会返回list_of_values
中值大于0的元素。
答案 3 :(得分:1)
以下是Smalltalk启发的一个小技巧 语言核心,不使用if语句或三元语言 运算符,但作为条件执行 机制。 : - )
#!/usr/bin/env python
class ATrue:
def ifThen(self,iftrue): iftrue()
def ifThenElse(self,iftrue,iffalse): return iftrue()
def andThen(self,other): return other()
def orElse(self,other): return self
class AFalse:
def ifThen(self,iftrue): pass
def ifThenElse(self,iftrue,iffalse): return iffalse()
def andThen(self,other): return self
def orElse(self,other): return other()
def echo(x): print x
if __name__=='__main__':
T = ATrue()
F = AFalse()
x = T # True
y = T.andThen(lambda: F) # True and False
z = T.orElse(lambda: F) # True or False
x.ifThenElse( lambda: echo("x is True"), lambda: echo("x if False"))
y.ifThenElse( lambda: echo("y is True"), lambda: echo("y if False"))
z.ifThenElse( lambda: echo("z is True"), lambda: echo("z if False"))
更新:整理一些符号以避免混淆并明确指出。并添加了代码,以显示如何实现逻辑运算符的快捷评估。
答案 4 :(得分:0)
if condition:
do_stuff()
else:
dont()
是
(lambda x: do_stuff() if x else dont())(condition)
但目前尚不清楚你在寻找什么。
请注意,这是不 if
声明 - 它是ternary operation。在Python中,他们只使用单词if
。例如,请参阅C#中的Lambda "if" statement?。