람다 함수의 조건문?
이전에 요청한 적이 계시지 만 어디에서 볼 수 없습니다.
내장으로 람다 함수 내에서 문을 많이 다하는 시나리오를 발견했습니다. 어렵게 만드는 것은 이상적으로는 한 줄의 코드에 나오는 것입니다 (가능하다면?).
일반적으로 다음과 같이 작성합니다.
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에서 함수는 함수와 정확히 동일한 서명을 갖습니다 .exec
eval
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))
'ProgramingTip' 카테고리의 다른 글
Java에서 TimeZone을 사용하여 절약 절약을 처리하는 방법 (0) | 2020.12.29 |
---|---|
쉼표와 세미콜론을 사용하고 있습니까? (0) | 2020.12.29 |
Django Rest Framework의 Serializer 클래스에 추가 인수 전달 (0) | 2020.12.29 |
Rust의 기본 함수 인수 (0) | 2020.12.29 |
++ x % = 10은 C ++에서 잘 정의되어 있습니까? (0) | 2020.12.29 |