Programing

파이썬의 람다에서 "if"를 수행하는 방법이 있습니까

lottogame 2020. 3. 8. 09:54
반응형

파이썬의 람다에서 "if"를 수행하는 방법이 있습니까


에서 파이썬 2.6 , 내가하고 싶은 :

f = lambda x: if x==2 print x else raise Exception()
f(2) #should print "2"
f(3) #should throw an exception

이것은 분명히 구문이 아닙니다. ifin 을 수행 lambda할 수 있습니까? 그렇다면 어떻게 수행합니까?

감사


찾고있는 구문 :

lambda x: True if x % 2 == 0 else False

하지만 당신은 사용할 수 없습니다 print또는 raise람다있다.


왜 함수를 정의하지 않습니까?

def f(x):
    if x == 2:
        print(x)
    else:
        raise ValueError

이 경우 람다를 사용하는 것이 정당하지 않습니다.


실제로 원하는 경우 람다에서 예외를 쉽게 제기 할 수 있습니다.

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: sys.stdout.write(["2\n",][2*(x==2)-2])

x == 2를 인쇄하면

x! = 2이면 당신은 올립니다.


파이썬의 람다는 사용이 허용되는 것과 관련하여 상당히 제한적입니다. 특히, (제외 운영자가 좋아에 대한 키워드를 가질 수 없습니다 and, not, or자신의 몸, 등).

따라서 예제를 위해 람다를 사용할 수있는 방법은 없지만 (사용할 수 없기 때문에 raise) 기꺼이 인정한다면 ...

f = lambda x: x == 2 and x or None

람다 정의에서 else ... if 문을 여러 개 사용할 수 있습니다 .

f = lambda x: 1 if x>0 else 0 if x ==0 else -1

여전히 인쇄하려면 다음 모듈을 가져올 수 있습니다

from __future__ import print_function

f = lambda x: print(x) if x%2 == 0 else False

정확히 필요한 것은

def fun():
    raise Exception()
f = lambda x:print x if x==2 else fun()

이제 필요한 방식으로 함수를 호출하십시오.

f(2)
f(3)

이 스 니펫은 다음을 도와줍니다.

x = lambda age: 'Older' if age > 30 else 'Younger'

print(x(40))

논리 연산자를 사용하여 조건부와 같은 것을 가질 수도 있습니다.

func = lambda element: (expression and DoSomething) or DoSomethingIfExpressionIsFalse

논리 연산자에 대한 자세한 내용은 여기를 참조 하십시오.


다음 샘플 코드는 저에게 효과적입니다. 이 질문과 직접 ​​관련이 있는지 확실하지 않지만 다른 경우에는 도움이되기를 바랍니다.

a = ''.join(map(lambda x: str(x*2) if x%2==0 else "", range(10)))

시도 해봐:

is_even = lambda x: True if x % 2 == 0 else False
print(is_even(10))
print(is_even(11))

밖:

True
False

참고 URL : https://stackoverflow.com/questions/1585322/is-there-a-way-to-perform-if-in-pythons-lambda



반응형