制御構文 - 条件文
●4章 制御構文
■■条件文
ifステートメントで偽として扱われる項目
・None
・False
・0、 0.0、 0j
・空のシーケンス "" ()
・空のマップ型 {}
・空のセット set()
・__bool__メソッドが定義されているクラスで、Falseを返すもの。
・__len__メソッドが定義されているクラスで、0を返すもの。
上記以外の値は真。
Trueは真
>>> if True:
... print("True")
...
True
1は真
>>> if 1:
... print("True")
...
True
以下は偽になるのでブロックが実行されない。
>>> if :
... print("True")
...
>>>
elifは多言語のelse if。
>>> if False:
... print("false")
... elif 1:
... print("1")
...
1
上から順に評価され、
最初の真のブロックを実行される。
>>> if False:
... print("False")
... elif 1:
... print("1")
... elif 0:
... print("0")
... elif True:
... print("True")
...
1
ifもelifも偽なのでelseブロックが実行される。
>>> if False:
... print("False")
... elif 0:
... print("0")
... else:
... print("default")
...
default
■andとorとnot
・and、or、notは複数の条件を指定したい時に用いる。
・andで繋がれた条件は左から順に評価し、
「全てが真」だった場合にその条件式のブロックが実行される。
>>> def get_true():
... print("call get_true")
... return True
...
>>> def get_false():
... print("call get_false")
... return False
...
>>> if get_true() and get_true():
... print("True")
...
call get_true
call get_true
True
・orで繋がれた条件は左から順に評価し、
最初に「真が見つかった時点で」その条件式のブロックが実行される。
それ以降のorで繋がれた式は評価しない(無視)。
>>> if get_true() or get_false():
... print("True")
...
call get_true
True
>>> if get_false() or get_true():
... print("True")
...
call get_false
call get_true
True
条件式を否定したい時はnotを使う。
0じゃない→偽じゃない→真
>>> if not 0:
... print("True")
...
True
「1ではない」というだけなので偽というわけではない。
>>> if not 1:
... print("False")
...
>>>
・andとorの変わった動き。
>>> 1 and 2
2
>>> 0 and 1
0
>>> 1 or 2
1
>>> 0 or 1
1
andは左辺が真の時には右辺を返す。
左辺が偽の時は左辺を返す。
orは左辺が真の時は左辺を返す。
左辺が偽の時は右辺を返す。
考察
「andは偽を好み、orは真を好む」と考えたらいいか。。。
パーフェクトPython (PERFECT SERIES 5)
- 作者: Pythonサポーターズ
- 出版社/メーカー: 技術評論社
- 発売日: 2013/03/05
- メディア: 大型本
- 購入: 1人 クリック: 65回
- この商品を含むブログ (17件) を見る