lambda
の式はPython
です。私はラムダ式がどのようなものでも加算器のような関数を生成するが、実際の有用性はまだ見えない、多くの簡単な例(SEの例を含む)を見てきました。ラムダなしで同じコードの平和を書くのは苦痛になるかもしれないいくつかの例です。lambdaはPythonで非常に便利です。
ラムダ式を使用するテキスト処理に何かを表示できますか?ラムダ式を回避するのは難しいでしょうか?しかし、実用的なもの(数学的なゲームではない)。私は頻繁にそれらを使用
lambda
の式はPython
です。私はラムダ式がどのようなものでも加算器のような関数を生成するが、実際の有用性はまだ見えない、多くの簡単な例(SEの例を含む)を見てきました。ラムダなしで同じコードの平和を書くのは苦痛になるかもしれないいくつかの例です。lambdaはPythonで非常に便利です。
ラムダ式を使用するテキスト処理に何かを表示できますか?ラムダ式を回避するのは難しいでしょうか?しかし、実用的なもの(数学的なゲームではない)。私は頻繁にそれらを使用
を、別の関数として、すべてのラムダ式を書くことは苦痛だっただろう。
このコードは何を簡単にしていますか?カスタムExcelテーブルをカスタムデータベーステーブルの挿入ステートメントに変換します。エクセルテーブルフィールドとデータベースフィールドとの間にはマッピングがあり、エクセルテーブルフィールドとエクセルテーブル値に適用される関数との間のマッピングがデータベースに挿入される前にマッピングされています。実際には、すべてのフィールドに別々の関数を定義する必要はありません。
map_func = { 'ID' : lambda x : 'mig_farm_seq.nextval',
'ENTERPRISE_NAME' : wrap_str,
'TAX_NUMBER' : wrap_str,
'FAMILY_NAME' : lambda x : wrap_str(x.split()[0]),
'GIVEN_NAME' : lambda x : wrap_str(x.split()[1]),
'ENTERPRISE_REGISTRATION_NUMBER' : wrap_str,
'PREMISE_NAME' : wrap_str,
'HOUSE_ID' : wrap_str,
'POSTAL_CODE' : wrap_str,
'PHONE_NUMBER_1' : lambda x : wrap_str(get_phone_number(x, True)),
'PHONE_NUMBER_2' : lambda x : wrap_str(get_phone_number(x, False)),
'FAX_NUMBER' : lambda x : wrap_str(x.replace(' ', '')),
'BANK_IDENTIFIER' : lambda x : wrap_str(x.replace(' ', '').replace('-', '')[:3]),
'BANK_ACCOUNT_NUMBER' : lambda x : wrap_str(x.replace(' ', '').replace('-', '')),
'NUMBER_OF_EMPLOYEES' : wrap_null,
'SETTLEMENT_NUMBER' : wrap_null,
'REGISTRATION_NUMBER' : lambda x : insert_reg_number % x,
'GENDER' : wrap_str,
'ACTIVITY' : lambda x : '0',
'REG_HOLDER_ACTIVITY' : lambda x : '0',
'PROCESSED_BY_JOB' : lambda x : '0'
}
ソース:代わりに、ここで何を示唆するhttp://pastebin.com/MxEPBMaZ
私はこの同じデザインパターンを実際のコードで何度も使用してきました。良い例のため+1。 –
@bpgergoこれは良い例です。私は受け入れを考えているが、約待つ。まだ1日です。 – xralf
+1 - 良い例。私はまた、このパターン(またはそれに非常によく似たパターン)を何度も使用しました。 –
一つの場所:sort
とsorted
機能のkey
機能:
>>> person = lambda name, age: { "name": name, "age": age }
>>> people = [ person("Joe", 61), person("Jane", 52) ]
>>> people.sort(key=lambda person: person["age"])
これは、自分の年齢によって人々のリストをソートします。
私はラムダを使用して別の場所がre.sub
である:あなたは二つの項目を比較するか、他のいくつかの操作を実行するために、短い機能を必要とするとき、彼らは有用であり、これは、引数として渡されます
>>> re.sub("0x([0-9a-f]+)", lambda match: "0x" + match.group(1).upper(), "0xfa")
'0xFA'
ソートソートキーの場合、 'operator。* getter()'を使用すると、より明確な/より速い/より短い/より良いことがよくあります。これは 'people.sort(key = operator.itemgetter(" age "))'で置き換えることができます。 –
はい、単純なケースでは、 'operator'モジュールを使用することは可能です。しかし、IMOではラムダを使用することが妥当であり、' operator'が不十分な場合があります(ex –
、そしてそこ関数が引数としてのみ使用されるため、関数に名前を付ける必要はありません。
ラムダとして書かれた関数が、通常は名前をつけるのに使用するdef
行と、最後に使用するreturn
行よりも短い場合に便利です。
関数を部分的に適用したい場合、つまり、別の場所に渡す必要のある関数があり、渡された関数の引数の一部またはすべてを実際に呼び出さずに渡したい場合に便利です。 Lamddaでは、必要なバリエーションごとに個別の関数を定義して名前を付けずに、これを行うことができます。
これは私がすでに知っていることですが、ラムダを示す何かをするいくつかの例があります(例:名前、名前): 'people.sort(key = lambda p:p [" last_name "]、p [" first_name "])私が求めているのは不可欠です。そして、この例は何か役に立つだけのものでなければなりません(数学的な遊びではない) – xralf
彼らは必須ではなく、単なる関数であり、ラムダなしで終日関数を書くことができます。 – kindall
多分 '必須 'は強い言葉ですが、私は「ラムダ式なしではこれはひどいことになるでしょう」という例はまだ見ていません。 – xralf
私のDjangoのプロジェクトのすべてが、2列(settings.py)が含ま:この場合
DIRNAME = os.path.dirname(__file__)
_rel = lambda x: os.path.join(DIRNAME, x)
私はlambda
のためにPythonインストールとgrepのlibディレクトリを訪問することをお勧めします。あなたはあなたの食欲を満たすのに十分な例を得るでしょう。
非常に良い提案です。これに私は次のように追加します: "ラムダ構造体を使ってコードを書き換えて、それらを使わないコードにしてみて、2つのバージョンを比較してみてください。おそらく、これはラムダの有用性(または無用)をケース「ケース・バイ・ベース」である。 –
@Abhijitもっと具体的にしてください。多くのファイルにはラムダがなく、ほんのわずかしかありません。 – xralf
彼らは実際に便利だワンケース:
はあなたが他のスロット(方法)に信号を接続することができますPyQtはを、使用していると言います。時々、関数を書くのではなく、むしろ特定のアクションを実行する必要があるので、必要なのは使い捨ての関数だけです。もちろん
obj.signal.connect(lambda: doFoo(bar))
、それはと対比される..
def doBoo():
return doFoo(bar)
obj.signal.connect(doBoo)
よりクリーン元の道を。
今回は機能的な方法を自分の命令コードの一部に書き換えます。おそらくラムダがなぜ有用なのかは分かります;-) –
リスト内包は厳密に言えばラムダの代替ではありません。それらは 'map'と' filter'関数の代わりになりました。確かに、ラムダは 'map'と' filter'でよく使われます。 – kindall
「避けがたい」と言っている点は何ですか? Lambdaは、複数行の関数定義を1つの読みやすい行に置き換えることができる場合に便利です。 http://stackoverflow.com/questions/8363390/how-to-make-tkinter-message-expand-when-i-resize-the-window/8364895#8364895はラムダなしで書くのが「難しい」ではなかったでしょうが、確かにコンパクトで簡単です。 – Dave