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
この場合、ラムダを使用することは正当化されません。
おそらく私がこれまでに書いた最悪の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」という構文自体はもっと悪いと考えます。
Pythonのラムダは、あなたが使うことが許されているものに関してかなり制限があります。具体的には、本文にキーワードを含めることはできません(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
このスニペットは役に立ちます:
x = lambda age: 'Older' if age > 30 else 'Younger'
print(x(40))
あなたはまだ印刷したい場合は、将来のモジュールをインポートすることができます
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)
論理演算子を使用して、条件付き演算子のようなものを使用することもできます。
func = lambda element: (expression and DoSomething) or DoSomethingIfExpressionIsFalse
あなたはここで論理演算子 についてもっと見ることができます
それを試してみてください:
is_even = lambda x: True if x % 2 == 0 else False
print(is_even(10))
print(is_even(11))
でる:
True
False
次のサンプルコードは私のために働きます。それがこの質問に直接関連しているかどうかわからないが、それが他の場合に役立つことを願っています。
a = ''.join(map(lambda x: str(x*2) if x%2==0 else "", range(10)))