首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在python3.5中创建一个lambda函数,它只接受正麻木

在python3.5中创建一个lambda函数,它只接受正麻木
EN

Stack Overflow用户
提问于 2017-05-03 08:24:46
回答 2查看 695关注 0票数 1

我需要创建一个返回指数函数的函数,但是指数函数只接受正数,我尝试使用lambda (是我的限制的一部分),我尝试这样做:

代码语言:javascript
运行
复制
def create(v):
    return (lambda x: (v*e**-(v*x)) if x>=0)

但它总是提示语法错误:

代码语言:javascript
运行
复制
File "<stdin>", line 8
  return (lambda x : (v*e**-(v*x)) if x>=0)
                                          ^
SyntaxError: invalid syntax

我怎么能让它只对正数起作用呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-05-03 08:37:32

您的代码很少有问题:

  1. 您缺少了else子句,在使用三元操作符时它是必需的。如果有人输入负数,Python解释器需要知道该做什么。
  2. 虽然不正确,但不需要围绕整个lambda函数的最外层参数。
  3. 您的括号放置不正确,if应该在lambda身体的括号中更深一层。

现在根据你的评论:

我只希望它在所提供的值为负值时不返回。

最后的结果应该是这样的:

代码语言:javascript
运行
复制
def create(v):
    return lambda x: (v*e**-(v*x) if x >= 0 else None)

事实上,您也不需要在lambda的身体周围加上括号:

代码语言:javascript
运行
复制
def create(v):
    return lambda x: v*e**-(v*x) if x >= 0 else None

尽管在这一点上,首先运行哪个操作可能会变得复杂,所以我强烈建议保留括号。

票数 2
EN

Stack Overflow用户

发布于 2017-05-03 08:33:11

三元表达式总是需要它的else部分,否则您还没有指定如果数字为负值应该发生什么(虽然您希望它不会发生,但可能仍然是这样)。

例如:

代码语言:javascript
运行
复制
>>> import math
>>> r = lambda x: math.sqrt(x) if x >= 0 else x
>>> r(9)
3.0
>>> r(-9)
-9

您所遇到的语法错误是因为缺少该else

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43754869

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档