私は時々、プレースホルダーを「何もしない」ラムダ式にしたいと思うことがあります。
def do_nothing(*args):
pass
しかし、ラムダ式はコロンの後のものを返そうとするため、次の構文は違法であり、pass
を返すことはできません。
do_nothing = lambda *args: pass
だから、私は疑問に思っていました、次の式は上記の適切な代替品でしょうか?
do_nothing = lambda *args: None
do_nothing
上記の関数は技術的にNone
を返しますが、None
を返すラムダ式を作成して、プレースホルダーラムダ式として使用することはできますか?それとも悪い習慣ですか?
この:
def do_nothing(*args):
pass
以下と同等です:
lambda *args: None
1つはlambda
であり、1つはそうではないという点で若干の違いがあります。 (たとえば、__name__
は関数ではdo_nothing
、ラムダでは<lambda>
になります。重要な場合は、**kwargs
を忘れないでください。 Python明示的なreturn <x>
return None
なしの関数。これは here :
呼び出しは、例外を発生させない限り、常に何らかの値、おそらくNoneを返します。
たとえば、次のようなデフォルト値として同様の関数を使用しました。
def long_running_code(progress_function=lambda percent_complete: None):
# Report progress via progress_function.
完全に何もしない機能が本当に必要な場合は、必ず*args
および*kwargs
。
noop = lambda *args, **kwargs: None
すべての栄光ある行動において
>>> noop = lambda *args, **kwargs: None
>>> noop("yes", duck_size="horse", num_ducks=100)
>>>
未来への賛成をして、**kwargs
処理。コードのどこか深いところで使用しようとして、それを忘れた場合does n't take kwargs
、それは何もしないことの例外です:
In [2]: do_nothing('asdf', duck="yes")
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-2-efbd722f297c> in <module>()
----> 1 do_nothing('asdf', duck="yes")
TypeError: <lambda>() got an unexpected keyword argument 'duck'
ラムダ関数がデータ変換に使用されることがあります。その場合、「何もしない」とは、入力を返すことを意味します。
lambda x: x
何も返さないために、あなたは書くことができます
lambda x: None
これは最も単純なラムダ式です。
do_nothing = lambda: None
引数は不要で、最小限の戻り値が必要です。