Address
304 North Cardinal St.
Dorchester Center, MA 02124
Work Hours
Monday to Friday: 7AM - 7PM
Weekend: 10AM - 5PM
Address
304 North Cardinal St.
Dorchester Center, MA 02124
Work Hours
Monday to Friday: 7AM - 7PM
Weekend: 10AM - 5PM
Python初心者・入門者に向けた解説シリーズ(?)ですが、今回はTrueまたはFalseというものについての解説です。
また、その知識をふまえて、if文を使って「if False:」と書かれているコードの解説も行います。
Contents
Pythonにおいて、TrueとFalseには次の2つの意味があります。
以下順番にみていきましょう。
ここでいう真理判定とは、真偽の判定のことです。どうやらPythonでは真偽判定とは言わないようなので(公式ドキュメントには『真理』という用語が用いられれている)、真理判定という言葉にしています。
真理判定の結果は必ずTrueかFalseになります。プログラミングにおけるこの「真理値としてTrueまたはFalse」の意味は、日常生活でいうところの「正しいか間違っているか」、「本物か偽物か」といったものとは少し異なる意味なので注意したいですね。
そしてPythonではどんなオブジェクトでも真理の判定が可能です。そして、その判定の結果として、ブール値(bool、正式名はboolean、読みは『ブーリアン』)が返ってきます。
たとえば、
a=2
bool(a)
こうすると、「True」というブール値を出す結果になります。
一方で、
b=[] #空のリスト
bool(b)
この場合は、「False」というブール値になります。
オブジェクトがどのようなものかで、このように真理値が異なります。
Pythonのオブジェクトは、bool()関数によって基本的にはTrueを返しますが、例外的にFalseというブール値を返すものがあります。公式ドキュメントではFalseを返すオブジェクトについて、
そのクラスが
__bool__()
メソッドを定義していて、それがFalse
を返す場合、または__len__()
メソッドを定義していて、それが 0 を返す場合は偽と判定されます。 1 主な組み込みオブジェクトで偽と判定されるものを次に示します:・偽であると定義されている定数:
None
とFalse
・数値型におけるゼロ:
0
,0.0
,0j
,Decimal(0)
,Fraction(0, 1)
・空のシーケンスまたはコレクション:
''
,()
,[]
,{}
,set()
,range(0)
と書かれています。
さきほどの
b=[] #空のリスト
bool(b)
が、Falseというブール値を表示したのは、空のリストは「空のシーケンス」に該当するからですね。
以上のような真理判定の結果としてのブール値という意味だけでなく、PythonではTrue・Falseはオブジェクトの1つでもあります。なぜならPythonでは全てがオブジェクトになっているからです。
普通、Pythonでは、
a=2
bool(a)
といったように、変数を宣言して、その変数に何かを代入してオブジェクトを作成します。
しかし、このTrue・FalseについてはPythonで最初から何もしなくても利用できるオブジェクトとして用意されています。たとえば次のコードを見て下さい。
False
bool(False)
1行目のFalseには代入も何もしていません。それでもbool関数で引数としていきなり使うことができています。Trueについても同じです。特別なオブジェクトと考えていいでしょう。
True・Falseはオブジェクトですから、当然に型を持ちます。
type(False)
type(True)
どちらも結果として、boolと表示されます。ブール型だとわかります。
またそれらはオブジェクトであるため、bool()によってその真理値を得られます。
bool(False)
bool(True)
みなさんの想像どおり、それぞれFalse、Trueと表示されます。
それでは、次にこのbool()による真理判定の結果を利用して、if文と組み合わせたコードを見ていきましょう。
ではここまでの説明を踏まえて、簡単なコードとして次のようなif文の条件式にFalseを使ったものを見てみてみましょう。
if False: #if節
print(0)
else: #else節
print(1)
まず、
if False:
の部分ですが、Falseという条件式が評価されます。このFalseの式は上述のように、
bool(False)
で真理を判定すると「Falseという真理値」を返す結果になるので、False式を評価した結果はFalseです。
ところが、if文は条件式が評価された結果、Trueという真理値になる場合に実行されるというルールです。よって今回はif節の処理は実行されません。かわりに、else節の処理が実行されます。したがって、
1
が表示されます。
この「if else」というif文とTrue/Falseとを組み合わせた4パターンの結果をまとめて見ました。
ifの条件式 | 真理値(TrueかFalseか) | 結果 |
---|---|---|
if False: | FalseはFalse よってelse節が実行される | 1 |
if True: | TrueはTrue よってif節が実行される | 0 |
if not False: | not FalseはTrue よってif節が実行される | 0 |
if not True: | not TrueはFalse よってelse節が実行される | 1 |
結局のところ、このように「if False:」とした場合はif節の処理がスルーされていることがわかります。
ちょっとした簡単なお試しコードを書く場合に「if False:」と指定しておけば、else節の処理がどのように動作するかチェックできるという利点があると思います。
一方で「if節の処理を飛ばす・スルーする」という目的では、pass文を使って次のように書くことも考えられます。
if True:
pass
else:
print(1)
しかし、こうしてしまうと、Trueの評価結果はTrueのためpass文が実行されます。その結果、else節の処理が行われません。すなわち、このコードは何も表示されません。
この点で、「if False:」を使ったものとpass文を使ったものとに違いが出てきます。
今回の記事に関連する記事として、「【Pythonの基本文法】while文は例外発生で中止される。そして「while 1:」とは?」もご覧ください。