有没有办法在python lambda中执行“if”

时间:2009-10-18 16:28:04

标签: python lambda python-2.6

python 2.6 中,我想这样做:

f = lambda x: if x==2 print x else raise Exception()
f(2) #should print "2"
f(3) #should throw an exception

这显然不是语法。是否可以在if中执行lambda,如果可以,如何执行该操作?

感谢

16 个答案:

答案 0 :(得分:564)

您正在寻找的语法:

lambda x: True if x % 2 == 0 else False

但你不能在lambda中使用printraise

答案 1 :(得分:36)

为什么不定义一个函数?

def f(x):
    if x == 2:
        print(x)
    else:
        raise ValueError

在这种情况下确实没有理由使用lambda。

答案 2 :(得分:21)

可能是迄今为止我写过的最糟糕的python系列:

"C:/User/Desktop"
"C:/User/Desktop/all"
"C:/User/Programms"

如果你打印x == 2,

如果x!= 2你加注。

答案 3 :(得分:19)

你可以轻松地在lambda中引发异常,如果那是你真正想做的事情。

def Raise(exception):
    raise exception
x = lambda y: 1 if y < 2 else Raise(ValueError("invalid value"))

这是个好主意吗?我的直觉一般是将错误报告从lambdas中删除;让它的值为None并在调用者中引发错误。我不认为这本质上是邪恶的 - 我认为“y if x else z”语法本身更糟 - 只是确保你不要试图在lambda体内做太多东西。

答案 4 :(得分:14)

Python中的Lambdas对于您允许使用的内容具有相当的限制性。具体而言,您的身体中不能包含任何关键字(andnotor等运营商除外)。

所以,你无法使用lambda作为你的例子(因为你不能使用raise),但是如果你愿意让步......你可以使用:

f = lambda x: x == 2 and x or None

答案 5 :(得分:9)

请注意,您可以在lambda定义中使用多个 else ... if 语句:

f = lambda x: 1 if x>0 else 0 if x ==0 else -1

答案 6 :(得分:2)

如果您仍想打印,可以导入将来的模块

var arr = [
	{
		"name": "Item1",
		"price": 100,
	},
	{
		"name": "Item2",
		"price": 500,
	},
	{
		"name": "Item3",
		"price": 250,
	},
	{
		"name": "Item4",
		"price": 1000,
	}
]


arr = arr.sort(function compare(a, b) {
  if (a.price > b.price)
     return 1;
  if (a.price < b.price)
     return -1;
  return 0;
});

console.log(arr);

答案 7 :(得分:2)

您真正需要的是

def fun():
    raise Exception()
f = lambda x:print x if x==2 else fun()

现在以您需要的方式调用该函数

f(2)
f(3)

答案 8 :(得分:1)

您还可以使用逻辑运算符来获得类似条件

的内容
func = lambda element: (expression and DoSomething) or DoSomethingIfExpressionIsFalse

您可以详细了解逻辑运算符here

答案 9 :(得分:1)

此代码段应为您提供帮助:

x = lambda age: 'Older' if age > 30 else 'Younger'

print(x(40))

答案 10 :(得分:1)

在lambda中执行if的一种简单方法是使用列表理解。

您不能在lambda中引发异常,但这是Python 3.x中一种类似于您的示例的方式:

f = lambda x: print(x) if x==2 else print("exception")

另一个例子:

如果M否则返回0,则返回1

f = lambda x: 1 if x=="M" else 0

答案 11 :(得分:0)

以下示例代码对我有用。不确定它是否与这个问题直接相关,但希望在其他情况下有帮助。

a = ''.join(map(lambda x: str(x*2) if x%2==0 else "", range(10)))

答案 12 :(得分:0)

尝试一下:

is_even = lambda x: True if x % 2 == 0 else False
print(is_even(10))
print(is_even(11))

出局:

True
False

答案 13 :(得分:0)

希望这会有所帮助

您可以通过以下方式解决此问题

f = lambda x:  x==2   

if f(3):
  print("do logic")
else:
  print("another logic")

答案 14 :(得分:0)

我认为这就是您想要的

PS C:\> Test-Connection -ComputerName www.ibm.com -Count 1 |
    Select-Object -Property Latency |
    ConvertTo-Json
{
  "Latency": 38
}
PS C:\> $PSVersionTable.PSVersion.ToString()
7.0.1

答案 15 :(得分:0)

给定场景的解决方案是:

f = lambda x : x if x == 2 else print("number is not 2")
f(30)  # number is not 2
f(2)   #2