web-dev-qa-db-ja.com

単純なif-then-elseステートメントを1行に入れる

可能な重複:
Python三項演算子

私はPythonに入ったばかりで、構文の簡潔さがとても好きです。しかし、1行に収まるようにif-then-elseステートメントを書くもっと簡単な方法はありますか?

例えば:

if count == N:
    count = 0
else:
    count = N + 1

これを書くもっと簡単な方法はありますか?つまり、Objective-Cではこれを次のように書きます。

count = count == N ? 0 : count + 1;

Pythonに似たようなものはありますか?

更新

この場合私はcount == (count + 1) % Nを使用できることを私は知っています。

一般的な構文について質問しています。

681
Abizern

これは、if-thenより具体的には 三項演算子 expressionです。これはpythonの構文です。

value_when_true if condition else value_when_false

より良い例: (thanks Mr. Burns

'Yes' if fruit == 'Apple' else 'No'

if構文と代入して対比する

fruit = 'Apple'
isApple = True if fruit == 'Apple' else False

vs

fruit = 'Apple'
isApple = False
if fruit == 'Apple' : isApple = True
1262
cmsjr

さらに、「普通の」if構文を使用して、コロンで1行にまとめることもできます。

if i > 3: print("We are done.")

または

field_plural = None
if field_plural is not None: print("insert into testtable(plural) '{0}'".format(field_plural)) 
135
count = 0 if count == N else N+1

- 三項演算子私はあなたの解決策がこれより読みやすいと言うでしょうが。

114
Tim Pietzcker

一般的な3項の構文

value_true if <test> else value_false

別の方法があります:

[value_false, value_true][<test>]

例えば:

count = [0,N+1][count==N]

これはどちらかを選択する前に両方のブランチを評価します。選択したブランチだけを評価するには

[lambda: value_false, lambda: value_true][<test>]()

例えば。:

count = [lambda:0, lambda:N+1][count==N]()
89
mshsayem
<execute-test-successful-condition> if <test> else <execute-test-fail-condition>

あなたのコードスニペットでそれはなるでしょう、

count = 0 if count == N else N + 1
18
phoenix24