web-dev-qa-db-ja.com

1行のif-condition-assignment

私は次のコードを持っています

num1 = 10
someBoolValue = True

someBoolValueTrueの場合、num1の値を20に設定する必要があります。それ以外は何もしません。だから、ここに私のコードがあります

num1 = 20 if someBoolValue else num1

何らかの方法で...else num1の部分を避けて見た目をきれいにすることはできますか?と同等

if someBoolValue:
    num1 = 20

このように...else passに置き換えてみました:num1=20 if someBoolValue else pass。私が得たのは構文エラーだけでした。また、...else num1部分を省略することもできません。

97
bdhar

あなたが実際にやろうとしていることはおそらくこのようなものに拡張されるので、Pythonではこれが可能だとは思わない:

num1 = 20 if someBoolValue else num1

else num1を除外すると、割り当てが実際に何かを返す必要があると確信しているため、構文エラーが表示されます。

他の人が既に述べたように、あなたはこれを行うことができますが、それはあなたがおそらく次回そのコードを読むときにあなた自身を混乱させることになるので悪いです:

if someBoolValue: num1=20

まったく同じ理由で、私はnum1 = someBoolValue and 20 or num1の大ファンではありません。私は実際にその行が何をしているのかを二度考えなければなりません。

やりたいことを実際に達成する最良の方法は、元のバージョンです。

if someBoolValue:
    num1 = 20

最良の理由は、あなたが何をしたいのかが非常に明白であり、自分自身を混乱させたり、他の人が後でそのコードと接触することがないためです。

また、補足として、Rubyの動作が少し異なるため、num1 = 20 if someBoolValueは有効なRubyコードです。

144
Frost

これを使って:

num1 = 20 if someBoolValue else num1
33
gigimon

1行で:

if someBoolValue: num1 = 20

しかし、そうしないでください。通常、このスタイルは予期されていません。人々は明快さと一貫性のために長い形を好む。

if someBoolValue:
    num1 = 20

(同様に、キャメルキャップは避ける必要があります。したがって、some_bool_valueを使用してください。)

else部分のないインラインexpressionsome_value if predicateは存在しないことに注意してください。これは、述部がfalseの場合、戻り値がないためです。ただし、すべての場合において、式には明確に定義された戻り値が必要です。これは、たとえばRubyやPerlなどの使用法とは異なります。

18
Debilski

次のいずれかを使用できます。

(falseVal, trueVal)[TEST]

TEST and trueVal or falseVal
12
kerwal

いいえ。num1 = 20 if someBoolValueのようなものが機能することを望んでいたと思いますが、機能しません。あなたが書いたifステートメントを使用するのが最良の方法だと思います:

if someBoolValue:
    num1 = 20
5
Mark Byers
num1 = 10 + 10*(someBoolValue == True)

それが私の最後の答えです。事前の回答は次のとおりであり、記載されている問題に対して過剰でした。 Getting_too_clever == not Good。ここに事前の答えがあります... True condとFalseに1つずつ追加したい場合は、まだ良いです:

num1 = 10 + (0,10)[someBoolValue == True]

num1には、そのままにしておくべき値が既にあると述べました。これは投稿の最初のステートメントなのでnum1 = 10であると仮定しました。したがって、20にアクセスする操作は10を追加することです。

num1 = 10
someBoolValue = True

num1 = 10 + (0,10)[someBoolValue == True]

print(f'num1 = {num1}\nsomeBoolValue = {someBoolValue}')

この出力を生成しました

num1 = 20
someBoolValue = True
3
MikeyB
num1 = 20 * someBoolValue or num1
1
kerwal

ブール値がtrueの場合にメソッドを呼び出したい場合は、else Noneを入力して3進数を終了できます。

>>> a=1
>>> print(a) if a==1 else None
1
>>> print(a) if a==2 else None
>>> a=2
>>> print(a) if a==2 else None
2
>>> print(a) if a==1 else None
>>>
0
soultech67

別の方法num1 = (20*boolVar)+(num1*(not boolVar))

0

ここに私が提案できるものがあります。別の変数を使用してif句を派生させ、num1に割り当てます。

コード:

num2 =20 if someBoolValue else num1
num1=num2
0
j raj

必要であれば、間違いなくnum1 =(someBoolValueの場合は20、それ以外の場合はnum1)を使用できます。

0
Yaonan Qian