真偽

真偽値 の Python

70個の演習

真偽値について

Pythonでは、真と偽の値はbool型で表されます。これはintのサブクラスです。この型の真偽値はTrueとFalseの2つだけです。これらの値は変数に代入でき、真偽値の演算子(and、or、not)と組み合わせることができます:

>>> true_variable = True and True
>>> false_variable = True and False

>>> true_variable = False or True
>>> false_variable = False or False

>>> true_variable = not False
>>> false_variable = not True

真偽値の演算子は_短絡評価_を行います。これは、演算子の右側にある式が必要な場合にのみ評価されるという意味です。

演算子にはそれぞれ異なる優先順位があり、notはandやorより先に評価されます。括弧(())を使うと、式の一部を他の部分より先に評価できます:

>>> not True and True
False

>>> not (True and False)
True

すべてのboolean operatorsは、==、>、<、is、is notなどのPythonのcomparison operatorsよりも優先順位が低いとみなされます。

型変換と真偽値の評価

bool関数(bool())は、任意のオブジェクトを真偽値に変換します。デフォルトでは、Falseを返すように定義されていない限り、すべてのオブジェクトはTrueを返します。

いくつかのbuilt-insは、定義上常にFalseとみなされます:

  • 定数NoneとFalse
  • 任意の_数値型_のゼロ(int、float、complex、decimal、fraction)
  • 空の_シーケンス_と_コレクション_(str、list、set、tuple、dict、range(0))
>>> bool(None)
False

>>> bool(1)
True

>>> bool(0)
False

>>> bool([1,2,3])
True

>>> bool([])
False

>>> bool({"Pig" : 1, "Cow": 3})
True

>>> bool({})
False

オブジェクトが_真偽値の文脈_で使われると、bool()を使って_真_または_偽_として透過的に評価されます:

>>> a = "is this true?"
>>> b = []

# This will print "True", as a non-empty string is considered a "truthy" value
>>> if a:
...  print("True")

# This will print "False", as an empty list is considered a "falsey" value
>>> if not b:
...   print("False")

クラスは、__bool__()メソッドや__len__()メソッドをオーバーライドして実装していれば、真と評価される状況でどのように評価されるかを定義できます。

真偽値は内部でどのように動作するのか

bool型は_int_の_サブタイプ_として実装されています。つまり、Trueは1と_数値的に等しく_、Falseは0と_数値的に等しい_ということです。これは、_等値演算子_を使って比較すると確認できます:

>>> 1 == True
True

>>> 0 == False
True

ただし、boolsはintsとは依然として異なります。これは、同一性演算子isを使って比較するとわかります:

>>> 1 is True
False

>>> 0 is False
False

注意:Python 3.8以降では、isの_左側_にリテラル(1、''、[]、{}など)を使うと警告が発生します。

等値演算子を使って真偽値の変数をTrueやFalseと比較することは、Pythonのアンチパターンとされています。代わりに、同一性演算子isを使うべきです:


>>> flag = True

# Not "Pythonic"
>>> if flag == True:
...    print("This works, but it's not considered Pythonic.")

# A better way
>>> if flag:
...    print("Pythonistas prefer this pattern as more Pythonic.")
GitHubで編集 リンクは新しいウィンドウまたはタブで開きます

真偽値を学習する

練習はロックされています

真偽値を練習するには、あと2個の演習のロックを解除してください