回答:
Pythonには末尾のステートメントはありません。if
if
Pythonには2種類あります。
if
ステートメント:
if condition: statement
if condition:
block
if
式(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 condition: statement
複数行のステートメントの場合は機能しないと思います。
if
、なぜこれが機能するのですprint [i for i in range(10) if i%2]
か?私は彼らが理解の外でそれを許可したいのですが...
for
間にあることに注意してください。
インラインif-else EXPRESSIONには常にelse句を含める必要があります。例:
a = 1 if b else 0
'a'変数の値を変更せずに残したい場合-古い 'a'値をアサートします(それ以外の場合でも構文要求で必要です):
a = 1 if b else a
このコードは、 bがFalseになると変更されません。
print a if b
else a
その後、より良いでしょうelse 0
if b: print a
その場合はシンプルなものが必要です
""
またはの行にあるものNone
、他の回答の詳細を参照)。
したくない場合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ブロックのインライン」)。
私がスレッドで他の人を使用しなかった、None
または使用した理由0
は、使用None/0
するとプログラムが、print None
またはprint 0
の場合に発生するためb
ですFalse
。
このトピックについて読みたい場合は、この機能がPythonに追加されたパッチのリリースノートへのリンクを含めました。
上記の「パターン」は、PEP 308に示されているパターンと非常に似ています。
この構文は奇妙で逆に見えるかもしれません。条件がCのcのように前ではなく式の途中にあるのはなぜですか?x:y?この決定は、新しい構文を標準ライブラリのモジュールに適用し、結果のコードがどのように読み取られるかを確認することによって確認されました。条件式が使用される多くの場合、1つの値は「一般的なケース」であり、1つの値は「例外的なケース」であり、条件が満たされないまれな場合にのみ使用されます。条件付き構文により、このパターンはもう少し明白になります。
内容=((doc + '\ n')if doc else '')
だから私は全体的にこれはそれを承認するための合理的な方法だと思いますが、あなたは以下の単純さで議論することはできません:
if logging: print data
print ""
は、それでも何かを印刷することです:空白行。
end
引数はprint
Python 3.x でのみ表示されますよね?
from __future__ import print_function
以下を使用できます。
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.
これは、文字列フォーマットで行うことができます。%表記、.format()およびf-strings(3.6の新機能)で動作します
print '%s' % (a if b else "")
または
print '{}'.format(a if b else "")
または
print(f'{a if b else ""}')
print a if b else ""
。それはまさにノエルクドの答えがすることです。
print "",
これは、Python2では(コロン)を使用print("", end="")
し、Python3では使用しないでください。
あなたの場合、これはうまくいきます:
a = b or 0
編集:これはどのように機能しますか?
質問では
b = True
だから評価
b or 0
結果は
True
に割り当てられていa
ます。
の場合b == False?
、に割り当てられるb or 0
2番目のオペランドに評価0
されa
ます。
これを試して 。それはあなたを助けるかもしれません
a=100
b=True
if b:
print a
単純化しすぎです。
if b:
print a
if DEBUG: print something
次の場合は常にelse
インラインが必要です。
a = 1 if b else 0
しかし、それを行うための簡単な方法は次のようになりますa = int(b)
。
a = int(bool(b))
。
うーん、リスト内包表記でそれを行うことができます。これは、実際の範囲が存在する場合にのみ意味があります。
print([a for i in range(0,1) if b])
または、これら2つの変数のみを使用します。
print([a for a in range(a,a+1) if b])