2

どういうany = lambda v: v意味ですか?それ自体vだけのようですv

class Object(object):                   
    """Common base class supporting automatic kwargs->attributes handling,
    and cloning."""
    attrs = ()

    def __init__(self, *args, **kwargs):
        any = lambda v: v
        for name, type_ in self.attrs:  
            value = kwargs.get(name)    
            if value is not None:       
                setattr(self, name, (type_ or any)(value))
            else:                       
                try:                    
                    getattr(self, name) 
                except AttributeError:  
                    setattr(self, name, None)
4

2 に答える 2

9

lambda v: v引数を変更せずに返す恒等関数を作成します。ローカル変数に割り当てることは、次のようにローカル関数を定義することと同じです。

def any(v):
    return v

実際の関数が利用できない場合、または処理が望ましくない場合に、関数を呼び出して引数に対して何らかの処理を実行するコードのフォールバックとして役立ちます。

あなたが投稿したコードでは、type_論理的に false (おそらくNone) になる可能性があります。これは、呼び出されないことを意味するため、ID 関数に置き換えられます。その場合、作成者は、より明示的ifに関数呼び出しをスキップすることもできましたが、ループがさらに混乱するという代償を払っていました。

BTWは、同じ名前でまったく異なる意味を持つ組み込み関数anyを隠しているため、ローカル変数の名前としては不適切です。

于 2012-11-01T08:19:16.743 に答える
0

lambda「関数を動的に作成する」ことを意味します。ラムダ計算 (Alonzo Church の論文) の一部であり、関数型プログラミングの基礎です。

この式lambda v: vは、パラメーター (この場合) を受け取り、パラメーターvを返す関数を作成します。

于 2012-11-01T08:19:21.103 に答える