web-dev-qa-db-ja.com

インラインifステートメントを印刷するにはどうすればいいですか?

ブール変数が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を書いても同じことが言えます。

私はここで何が足りないのですか?

298
Ricky Robinson

Pythonは ではありません は最後のif ステートメント を持ちます。

Pythonには2種類のifがあります。

  1. ifステートメント:

    if condition: statement
    if condition:
        block
    
  2. if expression (Python 2.5で導入された)

    expression_if_true if condition else expression_if_false
    

そして、print ab = 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行の変形を避ける理由はありません。

608
Jan Hudec

インラインif-else _ expression _ には常にelse句を含める必要があります。例:

a = 1 if b else 0

あなたの 'a'変数の値を変更しないでおきたい場合 - 古い 'a'値を使用したい場合(そうでない場合は構文上の要求でまだ必要です):

a = 1 if b else a

このコードでは、bがFalseになっても a は変更されません。

76

「else」ステートメントは必須です。あなたはこのようなことをすることができます:

>>> b = True
>>> a = 1 if b else None
>>> a
1
>>> b = False
>>> a = 1 if b else None
>>> a
>>> 

編集:

または、あなたのニーズに応じて、あなたは試すことができます:

>>> if b: print(a)
15
Alexis Huet

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ブロックの場合はインライン」)。

私がNone0を使っていないのは、bFalseの場合、None/0を使うとプログラムがprint Noneまたはprint 0を引き起こすからです。

このトピックについて読みたい場合は、この機能がPythonに追加されたというパッチのリリースノートに link を追加してください。

上記の「パターン」は、PEP 308に示されているパターンと非常によく似ています。

この構文は奇妙で逆に見えるかもしれません。 Cのcのように条件が表の前ではなく、式の途中で行われるのはなぜですか? x:y?標準ライブラリのモジュールに新しい構文を適用し、結果のコードがどのように読み取られるかを確認することによって、決定が確認されました。条件式が使用される多くの場合、1つの値は「一般的なケース」であると思われ、1つの値は「例外的なケース」であり、条件が満たされないときにのみ使用されます。条件付き構文は、このパターンをもう少し明確にします。

contents =((doc + '\ n')ifその他の場合 '')

だから私は全体的にこれはそれを承認するための合理的な方法だと思いますが、あなたは単純さを主張することはできません:

if logging: print data
14
Noelkd

2.5以降、 Cの "?:"三項条件演算子 と同等のものを使用でき、構文は次のようになります。

[on_true] if [expression] else [on_false]

あなたの例は問題ありませんが、elseを追加するだけです。

print a if b else ''
10
kenorb

あなたが使用することができます:

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.
7
Eduardo

これは 文字列フォーマット で行えます。これは%表記と .format() および f-strings と併用できます(3.6の新機能)。

print '%s' % (a if b else "")

または

print '{}'.format(a if b else "")

または

print(f'{a if b else ""}')
5
Eric Ed Lohmar

これを試して 。それはあなたを助けるかもしれません

a=100
b=True

if b:
   print a
5
SkariaArun

あなたの場合はこれが動作します:

a = b or 0

編集: /これはどのように機能しますか?

質問で

b = True

評価中

b or 0

になります

True

これはaに割り当てられています。

b == False?の場合、b or 0aに割り当てられる2番目のオペランド0に評価されます。

4
user647772

あなたは単純に過度に複雑です。

if b:
   print a
3
Nande

次の場合は、インラインで常にelseが必要です。

a = 1 if b else 0

しかし、もっと簡単な方法はa = int(b)です。

2
Daniel Roseman

それでは、なぜあなたは単純に書いてはいけません:

if b:
    print a
else:
    print 'b is false'
1
IcyFlame

うーん、 リストの内包表記 でそれを実行できます。これはあなたが本当の範囲を持っている場合にのみ意味があります..しかしそれは仕事をしません:

print([a for i in range(0,1) if b])

あるいは、次の2つの変数だけを使ってください。

print([a for a in range(a,a+1) if b])
0