【问题标题】:Calling lambda-created functions returns functions?调用 lambda 创建的函数返回函数?
【发布时间】:2013-01-19 08:29:38
【问题描述】:

我正在检查这个函数,它应该根据传递给它的参数在数组中向前或向后循环。要更新索引,代码是这样的:

>>> def updater(me, x, y):
...     fun = lambda x : x + 1 if x < y else lambda x : x - 1
...     return fun(me)
... 
>>> updater(2, 1, 0)
<function <lambda> at 0x7ff772a627c0>

我意识到如果我只使用一个简单的if-return-else-return 序列,上面的例子可以很容易地纠正,但这只是一个简化,在实际代码中它不仅仅是检查两个整数。是的,其中涉及一个返回函数的单行条件(不要问,不是我自己的代码)。

检查我的解释器是否正常...

>>> updater = lambda x: x + 1
>>> updater(2)
3

那么为什么第一个例子返回一个函数呢?

【问题讨论】:

    标签: python-3.x lambda


    【解决方案1】:

    这些括号应该可以帮助您了解您的代码是如何被解释的:

    fun = (lambda x : (x + 1 if x < y else (lambda x : x - 1)))
    

    所以要解决您的问题,只需添加一些括号:

    fun = (lambda x: x + 1) if x < y else (lambda x: x - 1)
    

    或者只使用一个 lambda:

    fun = lambda x: x + (1 if x < y else -1)
    

    【讨论】:

    • 噢噢噢噢。永远不要忘记 Programming 101 中的古老格言:当有疑问时使用括号!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-07
    • 1970-01-01
    • 1970-01-01
    • 2021-01-13
    • 2017-10-14
    • 1970-01-01
    • 2017-04-26
    相关资源
    最近更新 更多