これは条件式1とは関係ありません。Python プログラムはステートメントで構成されています。ほとんどのステートメントのほとんどの部分は式です。式には他の式のみが含まれます。
y += 1
はステートメントであり、式が期待される場所では使用できません。三項条件は全体として式であり、その 3 つの部分のそれぞれが式です。(x += 1) if random.choice([0, 1]) else (y += 1)
次の怪物を許可する以上に、許可する理由はありません。
x = (y += 1)
def foo(x=(x += 1)):
print x
print [x += 1, x *= 10]
式は、何らかの値に評価できるものです。ステートメントは値を持たないものです。ステートメントを条件式の「true の場合」または「false の場合」オペランドとして許可する場合、どの式でもどのステートメントも許可しないのはなぜですか? 結局、それは文法を複雑にして、ステートメントを含むことができる唯一の種類の式が条件式になるようにします。
x = y + pass
[return True, import sys]
これらはどれも意味がありません。(x += 1) if random.choice([0, 1]) else (y += 1)
条件式の要点は式であるためです。したがって、次のようなステートメントでより現実的に表示されます。
z = (x += 1) if random.choice([0, 1]) else (y += 1)
x += 1
Cのように、の「値」がx
(1が追加される前または後のいずれかの)の値であるという規則が考えられます。しかし、それは言語をかなり複雑にします。それでも、次の問題は解決しません。
z = pass if (import sys) else (while False: print 17)
の値はpass
? のimport sys
? whileループの?
これを機能させるには、Python の文法に存在するクラスとしての「ステートメント」を「表現ステートメント」と「通常のステートメント」に分離するか、特定の種類のステートメントの値について任意のルールを考案する必要があります。それは。おそらく両方。
単純な事実は、これを単一のステートメントとして記述しようとしている場合です。
(x += 1) if random.choice([0, 1]) else (y += 1)
次に、Python にはこのアイデアを表現するための構文が既にあり、それは次のとおりです。
if random.choice([0, 1]):
x += 1
else:
y += 1
if
ステートメントを条件式 (値は無視される) として記述してステートメントを難読化できるようにするためだけに、ステートメントを式のコンポーネントとして配置する言語 (および読みやすさ) に複雑さを導入する必要はありません。
1必要に応じて「三項条件」と呼んでください。ただし、「三項」または「三項演算子」は単にばかげています。オペランドが 3 つあるということは、最も重要なことではありません。+
それは「二項演算子」を呼び出すようなものです。