496

ブール変数がに設定されている場合にのみ、いくつかのものを出力する必要がありますTrue。それで、これを見た後、私は簡単な例で試しました:

>>> a = 100
>>> b = True
>>> print a if b
  File "<stdin>", line 1
    print a if b
             ^
SyntaxError: invalid syntax  

私が書いた場合も同じですprint a if b==True

ここで何が欠けていますか?

4

14 に答える 14

939

Pythonには末尾のステートメントがありませif

ifPythonには2種類あります。

  1. if声明:

    if condition: statement
    if condition:
        block
    
  2. 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句がない場合、何を印刷/割り当てますか?印刷/割り当てはまだあります。

また、表示したくない場合は、いつでもif1行で通常のステートメントを記述できますが、読みにくく、2行のバリアントを回避する理由はありません。

于 2012-08-09T09:47:28.010 に答える
119

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

a = 1 if b else 0

'a'変数値を変更せずに残したい場合-古い'a'値を割り当てます(そうでない場合は、構文要求で引き続き必要です):

a = 1 if b else a

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

于 2012-08-09T09:32:50.770 に答える
26

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

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

編集:

または、ニーズに応じて、次のことを試してみてください。

>>> if b: print(a)
于 2012-08-09T09:34:08.207 に答える
22

したくない場合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_functionPython 3以降を使用していない、または使用していない場合:

from __future__ import print_function
a = False
b = 100
print(b if a else "", end = "")

elseを追加することは、コードを構文的に正しくするために行う必要がある唯一の変更です。条件式にはelseが必要です(「elseブロックの場合はインライン」)

私が使用しなかった、Noneまたは0スレッド内の他の人が使用したのと同じように使用した理由は、を使用するとNone/0、プログラムが。print Noneprint 0bFalse

このトピックについて読みたい場合は、この機能がPythonに追加されたパッチのリリースノートへのリンクを含めました。

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

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

内容=((doc +'\ n')if doc else'')

したがって、全体として、これはそれを承認するための合理的な方法だと思いますが、次の単純さについて議論することはできません。

if logging: print data
于 2013-05-02T11:03:31.780 に答える
13

2.5以降では、Cの”?:” </a>の3値条件演算子と同等のものを使用でき、構文は次のとおりです。

[on_true] if [expression] else [on_false]

したがって、あなたの例は問題ありませんが、次elseのように単純に追加する必要があります。

print a if b else ''
于 2015-05-02T16:54:46.073 に答える
12

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

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

また

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

また

print(f'{a if b else ""}')
于 2017-02-24T15:48:15.177 に答える
11

次を使用できます。

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.
于 2014-03-19T17:10:35.830 に答える
8

次のように、インライン三項演算子を記述できます。

sure = True

# inline operator
is_true = 'yes' if sure else 'no'

# print the outcome
print(is_true)
于 2021-05-05T14:17:05.643 に答える
6

あなたの場合、これは機能します:

a = b or 0

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

質問で

b = True

だから評価

b or 0

結果は

True

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

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

于 2012-08-09T09:34:20.080 に答える
6

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

a=100
b=True

if b:
   print a
于 2012-08-09T09:57:34.127 に答える
6

あなたは単に複雑すぎます。

if b:
   print a
于 2013-06-01T00:35:45.927 に答える
2

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

a = 1 if b else 0

しかし、それを行うためのより簡単な方法はですa = int(b)

于 2012-08-09T09:33:41.487 に答える
2

うーん、リスト内包表記でそれを行うことができます。これは、実際の範囲がある場合にのみ意味があります。しかし、それは仕事をします:

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

または、これら2つの変数のみを使用します。

print([a for a in range(a,a+1) if b])
于 2018-09-12T17:02:28.857 に答える
-1

さて、あなたは単に書いてみませんか:

if b:
    print a
else:
    print 'b is false'
于 2013-02-26T07:26:24.147 に答える