[python] 인수에 대한 밑줄이있는 Python의 람다?

다음 코드는 무엇을합니까?

a = lambda _:True

대화 형 프롬프트에서 읽고 테스트 한 내용에서 항상을 반환하는 함수 인 것 같습니다 True.

나는 이것을 올바르게 이해하고 있습니까? 밑줄 ( _)도 사용 된 이유를 이해하고 싶습니다 .



답변

_변수 이름입니다. 시도 해봐. (이 변수 이름은 일반적으로 무시 된 변수의 이름입니다. 말하자면 자리 표시 자입니다.)

파이썬 :

>>> l = lambda _: True
>>> l()
<lambda>() missing 1 required positional argument: '_'

>>> l("foo")
True

따라서이 람다 는 하나의 인수가 필요합니다 . 항상을 반환하는 인수가없는 람다를 원한다면 다음 True 같이하십시오.

>>> m = lambda: True
>>> m()
True


답변

밑줄은 사용하지 않는 변수의 이름을 지정하는 Python 규칙입니다 (예 : 정적 분석 도구는이를 사용하지 않는 변수로보고하지 않음). 귀하의 경우 람다 인수는 사용되지 않지만 생성 된 객체는 항상 True. 따라서 람다는 수학의 상수 함수 와 다소 유사합니다 .


답변

관계없이 True를 반환하는 함수 인 것 같습니다.

예, True를 반환하는 함수 (또는 람다)입니다. 밑줄 보통 무시 변수에 대한 자리이며,이 경우에 불필요하다.

(거의 아무것도하지 않는) 이러한 함수의 사용 사례 예 :

dd = collections.defaultdict(lambda: True)

defaultdict 의 인수로 사용 True하면 일반적인 기본값으로 사용할 수 있습니다 .


답변

Lambda는 함수를 의미합니다. 위의 진술은 쓰기와 동일합니다

def f(_):
    return True

람다의 경우 변수가 있어야합니다. 그래서 당신은 _(마찬가지로 x, y..) 라는 변수를 전달합니다 .


답변

밑줄 _은 유효한 식별자이며 여기서 변수 이름으로 사용됩니다. 항상 True함수에 전달 된 인수에 대해 반환 됩니다.

>>>a('123')
True


답변

다음은 문제의 코드 줄입니다.

a = lambda _:True

하나의 입력 매개 변수를 갖는 함수를 생성합니다 : _. 밑줄은 변수 이름의 다소 이상한 선택이지만 변수 이름 일뿐입니다. _람다 함수를 사용하지 않을 때도 어디서나 사용할 수 있습니다 . 예를 들어 대신 ….

my_var = 5
print(my_var)

다음과 같이 작성할 수 있습니다.

_ = 5
print(_)

하지만 _매개 변수 이름의 이름으로 x또는 대신 사용 된 이유가 input있습니다. 우리는 잠시 후에 그것에 대해 알아볼 것입니다.

먼저 람다 키워드가와 유사 def하지만 구문이 다른 함수를 구성한다는 것을 알아야 합니다. 람다 함수의 정의는 다음 a = lambda _:True과 같이 작성합니다.

def a(_):
    return True

a입력 매개 변수로 명명 된 함수를 생성하고을 _반환합니다 True. 밑줄 대신을 a = lambda x:True사용하여 쉽게 작성할 수 있습니다 x. 그러나 관례는 _해당 변수를 사용하지 않으려는 경우 변수 이름으로 사용하는 것입니다. 다음을 고려하세요:

for _ in range(1, 11):
    print('pear')

루프 인덱스는 루프 본문 내부에서 사용되지 않습니다. 루프가 지정된 횟수만큼 실행되기를 원합니다. 로 winklerrr작성했습니다, “변수 이름 _입니다 […]는 같은”던져 – 멀리 변수 “아무 소용이, 그냥 자리 표시 자.”

마찬가지로“a = lambda x : True 이면 입력 매개 변수가 함수 본문 내에서 사용되지 않습니다. 입력 인수가있는 한 입력 인수가 무엇인지는 실제로 중요하지 않습니다. 해당 람다 함수의 작성자는 변수가 사용되지 않을 것임을 나타 내기 위해 _와 같은 대신 작성 했습니다 x.

람다 에는 인수가 있습니다. 그래서 쓰기

a(), 오류가 발생합니다.

인수가없는 람다를 원한다면 다음과 같이 작성하십시오.

 bar = lambda: True

이제 bar()인수없이을 호출 하면 잘 작동합니다. 인수가없는 람다는 항상 동일한 값을 반환 할 필요는 없습니다.

import random
process_fruit = lambda : random.random()

위의 람다 함수는 항상 동일한 상수를 반환하는 것보다 더 복잡합니다.

프로그래머가 때때로 lambda대신 키워드를 사용 하는 한 가지 이유 def 는 특히 짧고 간단한 함수 때문입니다. • 그래도 참고 lambda데프 문을 사용하여 동일한 작업을 수행하기 어려운 반면 정의는 일반적으로 모두 한 줄에 맞게 할 수 있습니다. 함수가 다시 사용되지 않을 때 sf lambda대신 사용 하는 또 다른 이유 def입니다. 나중에 함수를 다시 호출하지 않으려면 함수에 이름을 지정할 필요가 없습니다. 예를 들어 다음 코드를 고려하십시오.

def apply_to_each (transform, in_container) : out_container = list () for idx, item in enumerate (container, 0) : out_container [idx] = transform (item) return out_container

이제 다음과 같이 호출합니다.

squares  = apply_to_each(lambda x: x**2 range(0, 101))

주의 사항 lambda x: x**2라벨을 부여하지 않습니다. 이것은 나중에 다시 부르지 않을 것이기 때문입니다. 일시적으로 필요한 짧고 단순한 것입니다.

람다 함수에 이름을 지정할 필요가 없다는 사실은 “익명 함수”라는 다른 이름의 소스입니다.

또한 람다 문은 생성 한 함수에 대한 참조를 반환한다는 점에서 함수 호출과 같습니다. 다음은 불법입니다.

apply_to_each(def foo(x): x**2 ,  range(0, 101))

반면에 apply_to_each(lambda x: x**2 range(0, 101))괜찮습니다.

그래서, 우리는 사용하는 lambda대신에 def하고 _우리가 짧고 달콤한 무언가를 원하고 아마 나중에 다시 사용을 원하지 않을 때 대신 긴 변수 이름.


답변