web-dev-qa-db-ja.com

Python他のない三項演算子

Pythonでこれを1行で行うことは可能ですか?

if <condition>:
    myList.append('myString')

私は三項演算子を試しました:

myList.append('myString' if <condition>)

しかし、my IDE( MyEclipse )はelseなしでは気に入らなかった。

57
JCB

はい、これを行うことができます:

<condition> and myList.append('myString')

<condition>がfalseの場合、短絡が発生し、右側は評価されません。 <condition>がtrueの場合、右側が評価され、要素が追加されます。

上記を行うことはまったくPythonではないことを指摘しておきますが、おそらくこれに関係なく、これを書くのが最善でしょう。

if <condition>: myList.append('myString')

デモンストレーション:

>>> myList = []
>>> False and myList.append('myString')
False
>>> myList
[]
>>> True and myList.append('myString')
>>> myList
['myString']
83
Claudiu

言語が構文の使用を許可しない理由

variable = "something" if a_condition

elseなしの場合は、a_condition == Falsevariableは突然不明です。おそらくデフォルトでNoneになるかもしれませんが、Pythonはすべての変数の割り当てが実際に明示的な割り当てになることを必要とします。これは、関数呼び出しなどの場合、この関数は、割り当てステートメントの [〜#〜] rhs [〜#〜] と同じように評価されます。

同様に、条件付きreturnsであっても、すべてのreturnsは実際に返される必要があります。例えば:

return variable if a_condition

許可されていませんが、

return variable if a_condition else None

2番目の例は明示的に何かを返すことが保証されているため、許可されます。

30
Emmett Butler
if <condition>: myList.append('myString')

そうでなければ、いいえ。なぜ1行に置く必要があるのですか?

「三項演算子」は演算子であることに注意してください。他の演算子と同様に、それは何かを返す必要がありますなので、どのようにelse句なしで三項演算子を使用できますか?条件が真似ではない場合、何が返されるはずですか?

12
mgilson

あなたは基本的にdo_thing() if <condition> else passコンストラクト(実行するとSyntaxErrorをスローします)を要求しています。 (やや) 類似した質問do_thing() if condition else Noneの研究で発見したように、これはあなたが得ることができる限り近いものです(これは<condition> and do_thing()を行うもう1つの方法です)。したがって、この考えと他の答えを要約するために、ここにあなたのオプションがあります:

  • if <condition>: myList.append('myString') —最もハックの少ない(したがって好ましい)方法のようです
  • <condition> and myList.append('myString')
  • myList.append('myString') if <condition> else None
6
Filipp W.

myList.extend(['myString'] if condition else [])も機能しますが、他のソリューションよりも多くの作業があります。

3
Jake Biesinger

次のようなことができます:

myList.append('myString') if <condition> else False

または

myList.append('myString') if <condition> else 0
0