ProgramingTip

람다 함수의 조건문?

bestdevel 2020. 12. 29. 07:43
반응형

람다 함수의 조건문?


이전에 요청한 적이 계시지 만 어디에서 볼 수 없습니다.

내장으로 람다 함수 내에서 문을 많이 다하는 시나리오를 발견했습니다. 어렵게 만드는 것은 이상적으로는 한 줄의 코드에 나오는 것입니다 (가능하다면?).

일반적으로 다음과 같이 작성합니다.

T = 250

if (T > 200):
    rate = 200*exp(-T)
else:
    rate = 400*exp(-T)

return (rate)

그러나 다음과 같이 보이려면 필요합니다.

rate = lambda(T) : if (T>200): return(200*exp(-T)); else: return(400*exp(-T))

람다 함수를 외부에서 의사 결정을 내리고 각 경우에 별도의 람다 함수를 사용하는 것이 더 쉬운 일이라는 것을 알고 여기에서 실제로 적합하지 않습니다. 람다 함수는 배열에 저장되고 필요할 때 액세스하고, 각 배열 요소는 특정 "속도"에 해당하는 "속도"에 두 개의 개별적인 행이 있으면 문제가 발생합니다. 어떤 도움을 주시면 감사하겠습니다. 또는 가능하지 않은 경우 다른 사람의 확인이 좋을 것입니다. :)


exp1 if cond else exp2구문을 사용하십시오 .

rate = lambda T: 200*exp(-T) if T>200 else 400*exp(-T)

return람다 식 에는 사용하지 않습니다 .


이를 수행하는 올바른 방법은 간단합니다.

def rate(T):
    if (T > 200):
        return 200*exp(-T)
    else:
        return 400*exp(-T)

여기에서 사용하는 것 전혀 전혀 전혀 없습니다 lambda. 유일한 lambda장점은 익명 함수를 만들고 사용할 수 있습니다 (문이 아닌). lambda변수에 즉시 할당하면 더 이상 익명이 실행 명령문에서 사용 이유없이 코드를 읽을 수 없습니다.

rate어레이에 저장 될 수있는 방법이 정의 된 함수는 람다 함수가 동일하게 호출 주위를 등을 통과합니다. 정확히 동일합니다 (디버그, 인트로 스펙트 등이 조금 더 쉬움).


댓글에서 :

함수는 한 줄에 맞아야하는데 이름이 지정된 함수 할 수 있고 생각 했나요?

함수가 한 줄에 포함되는 이유를 상상할 수 없습니다. 하지만 이름이 지정된 함수로 그렇게 할 수 있습니다. 통역사에서 시도하십시오.

>>> def foo(x): return x + 1

또한 함수는 널리 저장되고 "eval"을 사용하여 평가 및 일반 함수로 수행하는 방법을 잘 모르겠습니다.

다시 말하지만, 왜 당신이 일을하는지에 대한 단서없이 100 % 확신하기는 어렵지만, 나는 당신이 이것에 대한 이유나 나쁜 이유가 확실하게 99 % 확신합니다. 사용하는 함수를 사용하기 위해 호출하고 호출 할 때마다 eval사용할 있습니다.

실제로 실제로 필요한 exec것입니다 eval. 대신 .

사용중인 Python 버전은 언급되지 않았습니다. 3.x에서 함수는 함수와 정확히 동일한 서명을 갖습니다 .execeval

exec(my_function_string, my_globals, my_locals)

2.7에서는 함수가 아니라 명령문이지만 3.x에서와 동일한 구문으로 숫자 수 (반환 값을 할당하지 않는 한) 작동합니다.exec

2.x 이전 버전 (2.6 이전 버전)에서는 대신 다음과 같이해야합니다.

exec my_function_string in my_globals, my_locals

예, if문에 축약 구문을 사용할 수 있습니다 .

rate = lambda(t): (200 * exp(-t)) if t > 200 else (400 * exp(-t))

s s를 return명시 문을 사용하지 않습니다 lambda.


람다에서 "if-then"문을 사용할 수 있음을 발견했습니다. 예를 들면 :

eval_op = {
    '|'  : lambda x,y: eval(y) if (eval(x)==0) else eval(x),
    '&'  : lambda x,y: 0 if (eval(x)==0) else eval(y),
    '<'  : lambda x,y: 1 if (eval(x)<eval(y)) else 0,
    '>'  : lambda x,y: 1 if (eval(x)>eval(y)) else 0,
}

rate = lambda whatever...당신이 람다의 요점을 무너 뜨렸다 말할 때까지 함수를 정의해야합니다. 그러나 람다를 사용할 수있는 'and'와 'or'를 사용할 수 있습니다.

lambda(T): (T>200) and (200*exp(-T)) or (400*exp(-T))

참조 URL : https://stackoverflow.com/questions/15772617/conditional-statement-in-a-one-line-lambda-function-in-python

반응형