2017-05-03 10 views
1

指数関数を返す関数を作成する必要がありますが、指数関数は正の数しか取らない、ラムダを使ってみました(私が持っている制限の一部です) 、と私はこの方法で試してみました:python3.5で正の数だけ取るラムダ関数を作成

def create(v): 
    return (lambda x: (v*e**-(v*x)) if x>=0) 

をしかし、それはすべての時間構文エラーを求められます。

File "<stdin>", line 8 
    return (lambda x : (v*e**-(v*x)) if x>=0) 
             ^
SyntaxError: invalid syntax 

は、どのように私はそれが正の数のみで動作させることができましたか?

+0

入力した数字が肯定的でない場合はどうしますか? –

+0

とにかくユーザー(または発信者)が負の値を提供することがあります。関数への入力値が負の場合、コードのどの部分が実行されるのかを自分自身に問い合せてください。 –

+0

私はそれが返されるようにします。指定された値が負の値である場合はなし – gramsch

答えて

2

あなたのコードと間違っていくつかのことがあります。

  1. あなたは三項演算子を使用する場合に必要とされるelse句を、逃しています。 Pythonインタプリタは、誰かがを実行した場合に何をするかを知る必要があります。に負数を入力します。
  2. が正しくないではなく、lambda関数全体の最も外側のパラメータは必要ありません。
  3. あなたのかっこは正しく配置されていません。ifは、lambdaの身体の括弧の1つ内側のレベルにする必要があります。あなたのコメントをもとに今

def create(v): 
    return lambda x: (v*e**-(v*x) if x >= 0 else None) 

は、私はちょうど提供された値は、ここで

負の場合にはNoneを返したいが、最終的な結果はどのように見えるかです

実際には、は必要ありません括弧a lambdaの体のラウンドのいずれか:

def create(v): 
    return lambda x: v*e**-(v*x) if x >= 0 else None 

この時点で、それが最初に実行された操作が複雑れる可能性がありますので、私は非常にカッコをおくことをお勧めしますが。

1

三項式は常にelse部分を必要とします。そうでないと、数値が負の場合に何が起こるべきかを指定していません。例えば

:あなたが取得している

>>> import math 
>>> r = lambda x: math.sqrt(x) if x >= 0 else x 
>>> r(9) 
3.0 
>>> r(-9) 
-9 

構文エラーは、そのelseの欠如についてです。

+1

最も完全なものであるから、私はあなたの答えをマークしました。 – gramsch

+1

@gramschの方が長くても必ずしも完全であるとは限りませんが、彼の答えには元のコードは含まれておらず、「なし」を返すというあなたの要求は考慮されません。私は彼の* anwerが無効であると言っているわけではない、私はちょうどあなたの議論はあまり意味がないと言っている –

関連する問題