4

以下は Python ディクショナリ (OpenERP アプリケーションから) で、フィールドはラムダによってデフォルト設定されています。このパターンの使い方がわかります。明らかに「アクティブ」はブール値、「レベル」は整数、「価格」は浮動小数点数です。

しかし、誰かがこれがどのように機能するかを正確に説明できますか? ここで「a」は何を表していますか?

_defaults = {
    'active': lambda *a: False,
    'level': lambda *a: 1,
    'price': lambda *a: 1.0,
    }

4

2 に答える 2

5

この*a構文は、任意の数の引数をキャプチャします。ラムダは 0 個以上の引数を受け入れ、関係なくすべて定数値を返します。

基本的に、これらのラムダは、渡されたすべての引数を無視します。

この構文は関数でも使用でき、 の形式で同等のキーワード引数もあり**keywords、マッピングが行われます。

クイックデモ:

>>> demo = lambda *a: a
>>> demo()
()
>>> demo(1, 2, 3)
(1, 2, 3)

demo*aここでは、キャプチャしたものを返します。呼び出しの引数であった 0 個以上の値のタプル。

于 2013-11-02T15:53:15.373 に答える
1

古い OpenERP バージョン (私の記憶が正しければ 5.0 まで) では、デフォルトは関数のみでした。

デフォルト値を実際に何らかの方法で計算する必要がある場合は問題ありません。

ただし、場合によっては、デフォルトが のような単なる定数です1.0。その場合、常に返す簡単な関数1.0が必要です。ラムダ式を使用すると、そのような関数をすばやく作成できます。

_defaults = {
    'field': lambda *a: 1.0
}

は、より短い書き方です:

def f():
    return 1.0

_defaults = {
    'field': f
}

OpenERP / Odoo の最近のバージョンでは、ラムダ関数の代わりに定数を指定するだけで済みます。したがって、次のこともできます。

_defaults = {
    'field': 1.0
}
于 2014-06-19T10:43:41.517 に答える