비단뱀의 람다로 if를 하는 방법이 있나요?
Python 2.6에서는 다음을 수행합니다.
f = lambda x: if x==2 print x else raise Exception()
f(2) #should print "2"
f(3) #should throw an exception
이건 구문이 아닌 게 분명해이 작업을 수행할 수 있습니까?if
에lambda
그렇다면 어떻게 해야 할까요?
찾으시는 구문은 다음과 같습니다.
lambda x: True if x % 2 == 0 else False
하지만 당신은 사용할 수 없습니다.print
또는raise
람다에 담아서
그냥 함수를 정의하지 그래요?
def f(x):
if x == 2:
print(x)
else:
raise ValueError
이 경우 람다를 사용할 이유가 없습니다.
아마 내가 지금까지 쓴 것 중 최악의 비단뱀 줄일 것이다.
f = lambda x: sys.stdout.write(["2\n",][2*(x==2)-2])
x == 2인 경우,
x != 2일 경우 상승합니다.
람다에서 예외를 쉽게 제기할 수 있습니다. 만약 당신이 정말 그렇게 하고 싶다면요.
def Raise(exception):
raise exception
x = lambda y: 1 if y < 2 else Raise(ValueError("invalid value"))
이게 좋은 생각일까요?일반적으로 제 본능은 오류 보고를 람다에서 제외하는 것입니다.그 값을 [None]으로 하여 발신자의 오류를 발생시킵니다.단, 이것이 본질적으로 나쁘다고는 생각하지 않습니다.- 저는 "y if x else z" 구문 자체가 더 나쁘다고 생각합니다.- 람다 본문에 너무 많은 것을 넣으려고 하지 않도록 주의해 주세요.
몇 가지 다른 방법을 사용할 수 있습니다.람다 정의의 문장이 다음과 같은 경우:
f = lambda x: 1 if x>0 else 0 if x ==0 else -1
Python의 Lamdas는 사용 가능한 항목에 대해 상당히 제한적입니다.특히 키워드는 사용할 수 없습니다(다음 연산자는 제외).and
,not
,or
등)을 몸에 지니고 있습니다.
따라서 람다를 예시로 사용할 수 없습니다(사용할 수 없기 때문에).raise
하지만, 그것을 인정해 주실 의향이 있다면…다음을 사용할 수 있습니다.
f = lambda x: x == 2 and x or None
이 스니펫은 다음과 같은 도움이 됩니다.
x = lambda age: 'Older' if age > 30 else 'Younger'
print(x(40))
인쇄를 계속하고 싶은 경우는, 장래의 모듈을 Import 할 수 있습니다.
from __future__ import print_function
f = lambda x: print(x) if x%2 == 0 else False
논리 연산자를 사용하여 조건과 같은 것을 가질 수도 있습니다.
func = lambda element: (expression and DoSomething) or DoSomethingIfExpressionIsFalse
논리 연산자에 대한 자세한 내용은 여기를 참조하십시오.
당신에게 정확히 필요한 것은
def fun():
raise Exception()
f = lambda x:print x if x==2 else fun()
이제 필요한 방식으로 기능을 호출할 수 있습니다.
f(2)
f(3)
람다에서 if를 수행하는 가장 쉬운 방법은 목록 이해를 사용하는 것입니다.
lamda에서는 예외를 만들 수 없지만 Python 3.x에서는 다음과 같이 예시와 유사한 작업을 수행할 수 있습니다.
f = lambda x: print(x) if x==2 else print("exception")
또 다른 예는 다음과 같습니다.
M 이외의 경우는 1을 반환한다.
f = lambda x: 1 if x=="M" else 0
특정 시나리오에 대한 솔루션은 다음과 같습니다.
f = lambda x : x if x == 2 else print("number is not 2")
f(30) # number is not 2
f(2) #2
다음은 Python 3.x를 사용하는 경우의 해결책입니다!
>>> f = lambda x: print(x) if x == 2 else print("ERROR")
>>> f(23)
ERROR
>>> f(2)
2
>>>
저는 다음 샘플 코드가 좋습니다.이 질문과 직접 관련이 있는지는 모르겠지만, 다른 경우에 도움이 되었으면 합니다.
a = ''.join(map(lambda x: str(x*2) if x%2==0 else "", range(10)))
이게 조금이나마 도움이 됐으면 좋겠다
당신은 다음과 같은 방법으로 이 문제를 해결할 수 있다.
f = lambda x: x==2
if f(3):
print("do logic")
else:
print("another logic")
언급URL : https://stackoverflow.com/questions/1585322/is-there-a-way-to-perform-if-in-pythons-lambda
'source' 카테고리의 다른 글
ballerina.io SQL LIKE 스테이트먼트 (0) | 2023.02.06 |
---|---|
Java 8: Java.util.function의 TriFunction(및 kin)은 어디에 있습니까?아니면 대체방법이 뭐죠? (0) | 2023.02.06 |
JavaScript - 문자열의 모든 콤마를 바꿉니다. (0) | 2023.02.01 |
문자열이 날짜인지 확인하는 함수 (0) | 2023.02.01 |
SQL 퍼포먼스:순서 사용 시 OR 사용 속도가 IN보다 느립니다. (0) | 2023.02.01 |