2017-09-20 19 views
1

下記のスニペットにもっと簡潔なコードがあるのだろうかと思います。Python、関数呼び出しを伴うelse文の場合の簡潔なコード?

def fun(x): 
    return x + 2 
a = 3 
x = fun(a) 
m = x if x == 3 else 4 

print(m) 

これは機能しますか?

m = (lambda x: x if x == 3 else 4)(fun(a)) 

あなたはこのことを見ることができます:あなたはそれをワンライナーを作ること、そして何らかの理由であなたは一度だけfunを呼び出すことができると判断している場合は

def fun(x): 
    return x + 2 

m = (x = fun(3)) if x == 3 else 4 

print(m) 
+0

理論的なone-linerで 'fun(3)'を使うことができたら 'x = fun(3)'で 'fun(3)'を使うことができます。そして、あなたは '3 == 3'を知っているので、' m = 3ならfun(3)== 3 else 4'となります。これが実際の状況ではうまくいかない場合は、実際の状況を代表するものを選んでください。 – Ryan

+1

割り当ては文であり、Pythonの式ではありません。コードは簡潔に見える。 –

+0

"これはできますか?"〜あなたは自分自身を試してみませんか? (juanpa.arrivillagaはそれが正しいと言っていません) –

答えて

2

、あなたはラムダ関数を使用することができますひどく読めるわけではありません。私はそれをお勧めしません。

式に代入を行うことができないため、試用コードが機能しません。

1

それは行うことができますが、それは非常に読みやすい/保守性のコードではありません。

m, = [ x if x == 3 else 4 for x in [fun(a)] ] 

割り当てxには、それがリストの内包内部のループ変数として使用された後に持続します。したがって、このワンライナーは、あなたが望む方法でmxの両方を割り当てるという効果があります。

+0

そして、あなたが醜い方法で乱用するforループを楽しむなら、Windowsのバッチファイルで深刻な何かをしようとする知的練習を勧めます。 – jez

関連する問題