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ますが、これは単なる単純化であり、実際のコードでは 2 つの整数をチェックするだけではありません。そして、はい、関数を返すワンライナーの条件が含まれています(私自身のコードではなく、尋ねないでください)。

インタプリタのサニティチェック中...

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

または、ラムダを 1 つだけ使用します。

fun = lambda x: x + (1 if x < y else -1)
于 2013-01-19T08:33:58.390 に答える