1

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

>>> 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

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

4

1 回答 1

2

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

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)
于 2013-01-19T08:33:58.390 回答