Pythonでラムダ内の関数を操作する方法は?

クリス

ラムダ関数のリストを操作したいのですが。このラムダ関数のリストにはすべて同じ関数が含まれているので、その関数に追加の引数が含まれるように操作したいと思います。

私の例については、以下を参照してください

def base_function(*args):
    for arg in args:
        print arg

list_of_functions = [
    lambda new_arg: base_function(new_arg,'arg_1'),
    lambda new_arg: base_function(new_arg,'arg_2'),
    lambda new_arg: base_function(new_arg,'arg_3')
]

関数のリスト全体を書き直すことなく、この関数のリストを次のように変更することは可能ですか?

list_of_functions = [
    lambda new_arg: base_function(new_arg,'arg_1','another_arg'),
    lambda new_arg: base_function(new_arg,'arg_2','another_arg'),
    lambda new_arg: base_function(new_arg,'arg_3','another_arg')
]

私がやろうとしていることの別の例については、以下を参照してください。私は以下を持っています:

def simple_function(arg,capitalize=False):
    if capitalize:
        print arg.upper()
    else:
        print arg 


list_of_functions = [lambda key_word: simple_function(key_word),lambda key_word: simple_function(key_word)]

しかし、上記のlist_of_functionsまたはsimple_functionを書き直すことなく、list_of_functionsを次のように変更したいと思います。

desired_list_of_functions = [lambda key_word: simple_function(key_word,capitalize=True),lambda key_word: simple_function(key_word,capitalize=True)]
zmo

@ austin-hastingsによって提案されているように、部分適用を使用してこれを行う方法は次のとおりです。

# first example from the OP

def base_function(*args):
    for arg in args:
        print arg

list_of_functions = [
    lambda new_arg: base_function(new_arg,'arg_1'),
    lambda new_arg: base_function(new_arg,'arg_2'),
    lambda new_arg: base_function(new_arg,'arg_3')
]

# solution:

from functools import partial

new_list_of_functions = [
  partial(fn, 'another_arg') for fn in list_of_functions
]

引数を最後に配置するには、@ austin-hastingsのソリューションを参照してください


もちろん、部分適用でlist_of_functionsをシャドウすることができます。

次に、特定のユースケースについて:

desired_list_of_functions = [
  lambda key_word: simple_function(key_word,capitalize=True),
  lambda key_word: simple_function(key_word,capitalize=True)
]

あなたはそのようにアプリケーションを行うことができます:

desired_list_of_functions = [
    partial(fn, capitalize=True) for fn in list_of_functions
]

これは、関数に適用さpartialれる引数(fn, *args, **kwargs)とるからです。


わかりました。参照シャドウイングを使用して、問題の回避策を次のように実行できます。

def simple_function(arg,capitalize=False):
    if capitalize:
        print (arg.upper())
    else:
        print (arg)


list_of_functions = [lambda key_word: simple_function(key_word),lambda key_word: simple_function(key_word)]

# will print 'foo' twice
for fn in list_of_functions:
    fn('foo')

simple_function = partial(simple_function, capitalize=True)

# will print 'FOO' twice
for fn in list_of_functions:
    fn('foo')

上記のハックは、ラムダ関数のコンテンツが実行時に実行されていないため、のlambda定義list_of_functionsがまだsimple_function参照にバインドされていないという事実を利用しています。

参照はラムダが呼び出されているときにのみ評価されるためsimple_function、ラムダ内の参照は、元の関数インスタンスではなく、新しい部分インスタンスを指します。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

ラムダ関数内のIntStreamを収集して値を操作する方法

分類Dev

Pythonでランダム関数を使用する方法は?

分類Dev

Pythonのgroupby内でラムダ関数の名前ヘッダーを設定する方法

分類Dev

ラムダ関数を独自の関数に分割する方法は?(ラムダは現在125文字以上です)

分類Dev

関数内でPythonのランダムモジュールを初期化する最善の方法

分類Dev

リスト内の関数をランダム化する方法は?

分類Dev

関数内の別のラムダでラムダをラップするС++

分類Dev

関数内のデータフレームを操作するPythonパンダ

分類Dev

Pythonのラムダ関数に値を割り当てる方法は?

分類Dev

ラムダ関数を使用してPythonのforループでKeyErrorをキャッチする方法は?

分類Dev

ラムダ自体の中でC ++ラムダ関数のアドレスを取得する方法は?

分類Dev

Pandas Groupby:2つのラムダ関数を使用する方法は?

分類Dev

Pythonでのラムダのソート関数を理解する

分類Dev

ラムダ関数内の変数を変更するにはどうすればよいですか?

分類Dev

CDKでラムダ関数のARNを取得する方法

分類Dev

ラムダ関数内でブールフラグを設定/削除する最良の方法

分類Dev

このdef関数からラムダ関数を作成する方法は?

分類Dev

re sub内のラムダ関数の値をインクリメントする方法は?

分類Dev

Pythonで2つの変数(列)を条件とするラムダ関数を作成する方法

分類Dev

ソート関数内でrbegin()を操作する方法は?

分類Dev

ラムダ関数で複数のパラメーターを渡して取得する方法は?

分類Dev

ラムダ関数の外部で宣言された変数の値を更新する方法は?

分類Dev

内側のラムダは、このRK4 ODEソルバーで外側のラムダ関数をどのように使用しますか?Python

分類Dev

ラムダ式内で外部関数を使用する

分類Dev

関数をパラメーター化するPythonの方法(ラムダなし)

分類Dev

ラムダまたは関数合成(中間関数なし)内で曖昧さを解消する方法はありますか?

分類Dev

ラムダで引数の型を指定する方法は?

分類Dev

ラムダ関数をクラスのフレンドにする方法は?

分類Dev

ラムダ式の前で# '(関数)を使用するのはいつですか?

Related 関連記事

  1. 1

    ラムダ関数内のIntStreamを収集して値を操作する方法

  2. 2

    Pythonでランダム関数を使用する方法は?

  3. 3

    Pythonのgroupby内でラムダ関数の名前ヘッダーを設定する方法

  4. 4

    ラムダ関数を独自の関数に分割する方法は?(ラムダは現在125文字以上です)

  5. 5

    関数内でPythonのランダムモジュールを初期化する最善の方法

  6. 6

    リスト内の関数をランダム化する方法は?

  7. 7

    関数内の別のラムダでラムダをラップするС++

  8. 8

    関数内のデータフレームを操作するPythonパンダ

  9. 9

    Pythonのラムダ関数に値を割り当てる方法は?

  10. 10

    ラムダ関数を使用してPythonのforループでKeyErrorをキャッチする方法は?

  11. 11

    ラムダ自体の中でC ++ラムダ関数のアドレスを取得する方法は?

  12. 12

    Pandas Groupby:2つのラムダ関数を使用する方法は?

  13. 13

    Pythonでのラムダのソート関数を理解する

  14. 14

    ラムダ関数内の変数を変更するにはどうすればよいですか?

  15. 15

    CDKでラムダ関数のARNを取得する方法

  16. 16

    ラムダ関数内でブールフラグを設定/削除する最良の方法

  17. 17

    このdef関数からラムダ関数を作成する方法は?

  18. 18

    re sub内のラムダ関数の値をインクリメントする方法は?

  19. 19

    Pythonで2つの変数(列)を条件とするラムダ関数を作成する方法

  20. 20

    ソート関数内でrbegin()を操作する方法は?

  21. 21

    ラムダ関数で複数のパラメーターを渡して取得する方法は?

  22. 22

    ラムダ関数の外部で宣言された変数の値を更新する方法は?

  23. 23

    内側のラムダは、このRK4 ODEソルバーで外側のラムダ関数をどのように使用しますか?Python

  24. 24

    ラムダ式内で外部関数を使用する

  25. 25

    関数をパラメーター化するPythonの方法(ラムダなし)

  26. 26

    ラムダまたは関数合成(中間関数なし)内で曖昧さを解消する方法はありますか?

  27. 27

    ラムダで引数の型を指定する方法は?

  28. 28

    ラムダ関数をクラスのフレンドにする方法は?

  29. 29

    ラムダ式の前で# '(関数)を使用するのはいつですか?

ホットタグ

アーカイブ