我需要创建一个返回exponencial函数的函数,但是指数函数只取正数,我尝试使用lambda(是我所拥有的限制的一部分),我试过这样:
def create(v):
return (lambda x: (v*e**-(v*x)) if x>=0)
但它始终会提示语法错误:
File "<stdin>", line 8
return (lambda x : (v*e**-(v*x)) if x>=0)
^
SyntaxError: invalid syntax
我怎样才能使它只能用正数?
答案 0 :(得分:2)
您的代码几乎没有问题:
else
子句,这在使用三元运算符时是必需的。如果有人 输入负数,Python解释器需要知道该怎么做。lambda
函数的最外层参数。 if
应该在lambda
的正文括号内更深一层。现在根据您的评论:
我只是希望它在提供的值为负时返回None
以下是最终结果的样子:
def create(v):
return lambda x: (v*e**-(v*x) if x >= 0 else None)
事实上,你不需要需要围绕lambda
身体的括号:
def create(v):
return lambda x: v*e**-(v*x) if x >= 0 else None
虽然此时首先运行哪个操作可能会很复杂,所以我强烈建议保留括号。
答案 1 :(得分:1)
三元表达式总是需要它的else
部分,否则你没有指定如果数字为负数会发生什么(虽然你希望它不会发生,但仍然可能是这种情况)。
例如:
>>> import math
>>> r = lambda x: math.sqrt(x) if x >= 0 else x
>>> r(9)
3.0
>>> r(-9)
-9
您遇到的语法错误是缺少else
。