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
in を実行することは可能ですか、実行するlambda
場合はどうすればよいですか?
ありがとう
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
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
死すべきプログラマーがそれを読み、解釈し、理解し、維持できるようにするだけです。
おそらく私がこれまで書いた中で最悪のpython行:
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)
、場合によっては、再び。
Pythonのラムダは、何を使用できるかに関してかなり制限があります。具体的には、(のような事業者以外の任意のキーワードを持つことができないand
、not
、or
自分の体で、など)。
したがって、ラムダを例に使用する方法はありません(使用できないためraise
)が、それを認めてもかまわない場合…次のように使用できます。
f = lambda x: x == 2 and x or None
論理演算子を使用して、条件付きのようなものを持つこともできます
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))
それを試してみてください:
is_even = lambda x: True if x % 2 == 0 else False
print(is_even(10))
print(is_even(11))
アウト:
True
False