ブール変数がTrue
に設定されているときだけ、いくつかのものを出力する必要があります。だから、 this を見た後、私は簡単な例を試してみました:
>>> a = 100
>>> b = True
>>> print a if b
File "<stdin>", line 1
print a if b
^
SyntaxError: invalid syntax
print a if b==True
を書いても同じことが言えます。
私はここで何が足りないのですか?
Pythonは ではありません は最後のif
ステートメント を持ちます。
Pythonには2種類のif
があります。
if
ステートメント:
if condition: statement
if condition:
block
if
expression (Python 2.5で導入された)
expression_if_true if condition else expression_if_false
そして、print a
とb = a
の両方がステートメントであることに注意してください。 a
の部分だけが式です。あなたが書いたのであれば
print a if b else 0
その意味は
print (a if b else 0)
そして同様にあなたが書くとき
x = a if b else 0
その意味は
x = (a if b else 0)
それではelse
節がなければ何を出力しますか?印刷/割り当ては まだあります です。
注意してください、そこにいたくないのであれば、通常のif
ステートメントを常に1行で書くことができます。ただし、読みにくく、2行の変形を避ける理由はありません。
インラインif-else _ expression _ には常にelse句を含める必要があります。例:
a = 1 if b else 0
あなたの 'a'変数の値を変更しないでおきたい場合 - 古い 'a'値を使用したい場合(そうでない場合は構文上の要求でまだ必要です):
a = 1 if b else a
このコードでは、bがFalseになっても a は変更されません。
「else」ステートメントは必須です。あなたはこのようなことをすることができます:
>>> b = True
>>> a = 1 if b else None
>>> a
1
>>> b = False
>>> a = 1 if b else None
>>> a
>>>
編集:
または、あなたのニーズに応じて、あなたは試すことができます:
>>> if b: print(a)
from __future__ import print_function
をしたくない場合は、次のようにします。
a = 100
b = True
print a if b else "", # Note the comma!
print "see no new line"
どの印刷物:
100 see no new line
from __future__ import print_function
に嫌われていない、またはpython 3以降を使用している場合
from __future__ import print_function
a = False
b = 100
print(b if a else "", end = "")
コードを構文的に正しくするために必要な変更はelseを追加することだけです。条件式にelseを指定する必要があります(「else elseブロックの場合はインライン」)。
私がNone
や0
を使っていないのは、b
がFalse
の場合、None/0
を使うとプログラムがprint None
またはprint 0
を引き起こすからです。
このトピックについて読みたい場合は、この機能がPythonに追加されたというパッチのリリースノートに link を追加してください。
上記の「パターン」は、PEP 308に示されているパターンと非常によく似ています。
この構文は奇妙で逆に見えるかもしれません。 Cのcのように条件が表の前ではなく、式の途中で行われるのはなぜですか? x:y?標準ライブラリのモジュールに新しい構文を適用し、結果のコードがどのように読み取られるかを確認することによって、決定が確認されました。条件式が使用される多くの場合、1つの値は「一般的なケース」であると思われ、1つの値は「例外的なケース」であり、条件が満たされないときにのみ使用されます。条件付き構文は、このパターンをもう少し明確にします。
contents =((doc + '\ n')ifその他の場合 '')
だから私は全体的にこれはそれを承認するための合理的な方法だと思いますが、あなたは単純さを主張することはできません:
if logging: print data
あなたが使用することができます:
print (1==2 and "only if condition true" or "in case condition is false")
同様にあなたは好きになることができます:
print 1==2 and "aa" or ((2==3) and "bb" or "cc")
実社会の例:
>>> print "%d item%s found." % (count, (count>1 and 's' or ''))
1 item found.
>>> count = 2
>>> print "%d item%s found." % (count, (count>1 and 's' or ''))
2 items found.
これを試して 。それはあなたを助けるかもしれません
a=100
b=True
if b:
print a
あなたの場合はこれが動作します:
a = b or 0
編集: /これはどのように機能しますか?
質問で
b = True
評価中
b or 0
になります
True
これはa
に割り当てられています。
b == False?
の場合、b or 0
はa
に割り当てられる2番目のオペランド0
に評価されます。
あなたは単純に過度に複雑です。
if b:
print a
次の場合は、インラインで常にelse
が必要です。
a = 1 if b else 0
しかし、もっと簡単な方法はa = int(b)
です。
それでは、なぜあなたは単純に書いてはいけません:
if b:
print a
else:
print 'b is false'
うーん、 リストの内包表記 でそれを実行できます。これはあなたが本当の範囲を持っている場合にのみ意味があります..しかしそれは仕事をしません:
print([a for i in range(0,1) if b])
あるいは、次の2つの変数だけを使ってください。
print([a for a in range(a,a+1) if b])