私は次のコードを持っています
num1 = 10
someBoolValue = True
someBoolValue
がTrue
の場合、num1
の値を20
に設定する必要があります。それ以外は何もしません。だから、ここに私のコードがあります
num1 = 20 if someBoolValue else num1
何らかの方法で...else num1
の部分を避けて見た目をきれいにすることはできますか?と同等
if someBoolValue:
num1 = 20
このように...else pass
に置き換えてみました:num1=20 if someBoolValue else pass
。私が得たのは構文エラーだけでした。また、...else num1
部分を省略することもできません。
あなたが実際にやろうとしていることはおそらくこのようなものに拡張されるので、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コードです。
これを使って:
num1 = 20 if someBoolValue else num1
1行で:
if someBoolValue: num1 = 20
しかし、そうしないでください。通常、このスタイルは予期されていません。人々は明快さと一貫性のために長い形を好む。
if someBoolValue:
num1 = 20
(同様に、キャメルキャップは避ける必要があります。したがって、some_bool_value
を使用してください。)
else
部分のないインラインexpressionsome_value if predicate
は存在しないことに注意してください。これは、述部がfalseの場合、戻り値がないためです。ただし、すべての場合において、式には明確に定義された戻り値が必要です。これは、たとえばRubyやPerlなどの使用法とは異なります。
次のいずれかを使用できます。
(falseVal, trueVal)[TEST]
TEST and trueVal or falseVal
いいえ。num1 = 20 if someBoolValue
のようなものが機能することを望んでいたと思いますが、機能しません。あなたが書いたif
ステートメントを使用するのが最良の方法だと思います:
if someBoolValue:
num1 = 20
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
num1 = 20 * someBoolValue or num1
ブール値が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
>>>
別の方法num1 = (20*boolVar)+(num1*(not boolVar))
ここに私が提案できるものがあります。別の変数を使用してif句を派生させ、num1に割り当てます。
コード:
num2 =20 if someBoolValue else num1
num1=num2
必要であれば、間違いなくnum1 =(someBoolValueの場合は20、それ以外の場合はnum1)を使用できます。