2011-12-15 14 views
1

Pythonで定数λ関数をどのように定義しますか?Pythonの定数ラムダ関数

私はそれが動作しますが、それは無駄すぎる

lam = lambda t: 1 + t*0 

を使用今の

lam (array[1,2,3,4,5]) 

などの評価表現にそれを必要としますか?

+2

あなたが行うには、「一定のラムダ関数を」何をしたいですか?すべての要素が同じ値に設定された配列を返すことは目的ですか?質問のコードは私のためには機能しません。 –

+0

ここでの混乱の原因:あなたの思うような理由から、あなたの 'lam()'は "働いていません"。配列全体が個々の要素ではなく 't'で渡されています。スカラーと配列の間にオーバーロードされた演算子' + 'のために1の配列が得られます。定数のlamda関数とは関係ありません。 – wim

答えて

5

をどのような議論が呼び出されたのか、それはA-OKです!あなたは決してに義務付けられていませんあなたの議論のいずれかを使用してください。 Pythonで

lambda

あなたはラムダ式を取り、すぐに変数にその戻り値を代入しようとしている場合

、あなたが機能を付与されている名前のない関数(および他のいくつかの、無関係の制限)であります名前。それをしないで、通常の関数を定義するだけです。関数を別の関数に渡す必要があり、使用したい関数がほとんどなく、(常に1を返すときのように)名前を評価することさえできないときには、lambdaに到達する必要があります。 Pythonには、このような「高次関数」(引数として他の関数を使う関数)があり、組み込み名前空間にはmapfilterおよびreduceがあります。

#never! 
always_return_one = lambda ignored_argument: 1 

#OK: functions with names are def'ed not lambda'd 
def always_return_one(ignored_argument): 
    return 1 

#Also OK: pass the lambda to another function as soon as you spell it. 
modified_list = some_highorder_function(lambda ignored: 1, [1, 2, 3, 4, 5]) 

Pythonで最も使用されるの高次機能のいくつかは、特別な構文を持っています。関数がmapた場合上記の場合、あなたはそうのようなリストの内包表記を使用することができます。

少し簡単に読み込み、を一貫し 高速です
modified_list = [1 for ignored in [1, 2, 3, 4, 5]] 

!方法についてはちょうど

2

あなたはそのパラメータを無視し、常に1を返すためにラムダ関数をしたい場合は、単にパラメータを使用しないでください:あなただけの、関係なく同じものを返す関数を持つようにしたい場合は

lam = lambda t: 1 
+0

または、ご存じのとおり、1 – wim

1

:未使用の引数のそれは使用する従来のです

[1] * len(array) 
3

_

lam = lambda _: 1 
関連する問題