source

파이썬에서 적합한 '아무것도 하지 않는' 람다 표현?

manycodes 2023. 9. 8. 21:36
반응형

파이썬에서 적합한 '아무것도 하지 않는' 람다 표현?

저는 때때로 자리 표시자가 람다 표현을 '아무것도 하지 않는' 것으로 만들고 싶어하는 제 자신을 발견합니다.

def do_nothing(*args):
    pass

그러나 다음 구문은 lambda 표현식이 콜론 뒤에 있는 것은 무엇이든 반환하려고 시도하므로 불법이며 반환할 수 없습니다.pass.

do_nothing = lambda *args: pass

그래서 저는 다음 표현이 위의 표현을 대체하는 데 적합할까요?

do_nothing = lambda *args: None

그 이후로do_nothing기술적 반환 이상의 기능None, 돌아오는 람다 표현을 해도 괜찮은가요?None자리 표시자 람다 표현으로 사용할 수 있습니까?아니면 나쁜 연습입니까?

다음 내용:

def do_nothing(*args):
    pass

는 다음과 같습니다.

lambda *args: None

그것은 약간의 작은 차이점이 있습니다.lambda하나는 그렇지 않습니다. (예를 들어,__name__될 것이다do_nothing기능상으로, 그리고<lambda>람다(lambda)에잊지마세요**kwargs, 당신에게 중요한 일이라면명시적 기능이 없는 Python에서의 기능return <x>돌아가다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)
>>>

사이드 노트

승인된 답변은 사용만 가능하기 때문에*args, 는 당신이 미래를 위해 호의를 베풀 것이라는 것을 지적해야만 합니다.**kwargs처리.만약 당신이 사용하려 한다면,noop당신 코드 어딘가 깊은 곳에서 당신은 그것이 필요하지 않다는 것을 잊었습니다.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

인수가 필요 없고 필요한 반환이 최소입니다.

파이썬 3에서는 이를 위해 어떤 함수도 정의할 필요가 없습니다.부르기type(None)당신에게 돌려줄 것입니다.NoneType아무것도 하지 않을 때 사용할 수 있는 생성자:type(None)(). 기억하세요.NoneType생성자가 0개의 인수만 사용합니다.

그러나 파이썬 2에서 인스턴스를 만드는 것은NoneType불가능합니다, 그래서.lambda: None가장 말이 되는 것 같습니다.

이 표현 외에

lambda *args: None

Ellipsis를 사용한 또 다른 우아한 표현이 있습니다.

lambda *args: ...

함수에 인수가 없는 경우(예: 콜백)에도 유용할 수 있습니다.

lambda: None

lambda: ...

언급URL : https://stackoverflow.com/questions/22738412/a-suitable-do-nothing-lambda-expression-in-python

반응형