에서 파이썬 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
in 을 수행 lambda
할 수 있습니까? 그렇다면 어떻게 수행합니까?
감사
에서 파이썬 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
in 을 수행 lambda
할 수 있습니까? 그렇다면 어떻게 수행합니까?
감사
답변:
찾고있는 구문 :
lambda x: True if x % 2 == 0 else False
하지만 당신은 사용할 수 없습니다 print
또는 raise
람다있다.
if
람다에서 어떻게 사용 합니까?"였습니다. "숫자가 짝수이면 True를 반환하는 람다를 작성하는 가장 좋은 방법은 무엇입니까?"
왜 함수를 정의하지 않습니까?
def f(x):
if x == 2:
print(x)
else:
raise ValueError
이 경우 람다를 사용하는 것이 정당하지 않습니다.
print
2.6에서는 아직 기능이 아닙니다. :)
def
것은 일반적으로 매우 나쁜 아이디어 (tm)입니다. 단지 def
필사자 프로그래머가 그것을 읽고, 해석하고, 이해하고 유지할 수 있도록 사용 하십시오.
아마 내가 지금까지 쓴 최악의 파이썬 줄 :
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"문법 자체가 더 나쁘다고 생각한다.
x = RaiseValueErrorOnNone(x)
, 경우에 따라 다시.
파이썬의 람다는 사용이 허용되는 것과 관련하여 상당히 제한적입니다. 특히, 사업자 등을 제외하고 (키워드를 가질 수 없습니다 and
, not
,or
자신의 몸, 등).
따라서 예제를 위해 람다를 사용할 수있는 방법은 없지만 (사용할 수 없기 때문에 raise
) 기꺼이 인정한다면 ...
f = lambda x: x == 2 and x or None
여전히 인쇄하려면 다음 모듈을 가져올 수 있습니다
from __future__ import print_function
f = lambda x: print(x) if x%2 == 0 else False
논리 연산자를 사용하여 조건부와 같은 것을 가질 수도 있습니다.
func = lambda element: (expression and DoSomething) or DoSomethingIfExpressionIsFalse
if
구문은 항상 이것보다 선호됩니다. 조건을 확인 하는 명백한 방법.
if
나는이 발견, 그래서 문을 분명하지 방법을.
정확히 필요한 것은
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))