在python3.5中创建一个只接受正numbres的lambda函数

时间:2017-05-03 08:24:47

标签: python-3.x lambda

我需要创建一个返回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

我怎样才能使它只能用正数?

2 个答案:

答案 0 :(得分:2)

您的代码几乎没有问题:

  1. 您错过了else子句,这在使用三元运算符时是必需的。如果有人 输入负数,Python解释器需要知道该怎么做。
  2. 虽然不正确,但您不需要围绕整个lambda函数的最外层参数。
  3. 您的括号放置不正确,if应该在lambda的正文括号内更深一层。
  4. 现在根据您的评论:

      

    我只是希望它在提供的值为负时返回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