在 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
,如果可以,如何执行该操作?
感谢
答案 0 :(得分:564)
您正在寻找的语法:
lambda x: True if x % 2 == 0 else False
但你不能在lambda中使用print
或raise
。
答案 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对于您允许使用的内容具有相当的限制性。具体而言,您的身体中不能包含任何关键字(and
,not
,or
等运营商除外)。
所以,你无法使用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