2017-11-28 13 views
1

戻り値のリストを、これらの値を返す関数のリストに変換しようとしています。値のリストをこれらの値を返す関数のリストに変換する方法

lst = [1, 2] 
funcs = [lambda: x for x in lst] 

これは同等です:

x = 2 
funcs = [lambda: x, lambda: x] 

が、私が取得しようとしています:

funcs = [lambda: 1, lambda 2] 

このquestionはこれが起こっている理由を説明するが、実行する方法を提供していませんそれ。

これを達成する方法はありますか?

答えて

4

これは動作します:

[lambda x=x: x for x in lst] 

説明:これは、現在、ループパラメータxに設定されたデフォルト値で初期化される新しい機能パラメータxを作成します。パラメータなしでメソッドを呼び出すと、デフォルトが返されます。私はそれがあまり混乱させるために異なる名前を使用することをお勧め

[lambda result=i: result for i in lst] 

別のアプローチは、それが返すネストされた関数を定義して、独自のlambda様関数を記述することです。

2

あなたは使用することができます。

def f(x): 
    return lambda: x 

funcs = [f(x) for x in lst] 

ここにあなたがfの体内に任意の関数定義を置くことができるための機能が、より複雑である場合には、このアプローチは特に便利かもしれません。

関連する問題