- pythonのif文の基本的な実装方法
- elif, elseを用いたif文の条件の追加
- 論理型、空のリスト、空の文字列などの扱い
- and, or, not, any, allの利用
- 1行でのif, elseの利用
- if文のネスト
- __bool__の実装
- セイウチ演算子
など、if文について言語仕様も含めて、詳細に解説しています。
[rtoc_mokuji title="" title_display="" heading="h3" list_h2_type="" list_h3_type="" display="" frame_design="" animation=""]
if文の基本的な使い方
if文とは、制御文の一種で、処理を分岐させ特定の条件の場合にのみある処理をさせたい場合に用いられます。
<処理>
- if文の分岐による処理の概要(if文の分岐を満たす場合にのみ特定の処理が実行される)

・if文の条件一覧
| 関数名 | 処理内容 |
|---|---|
| ○○ == ○○ | 左側の式と右側の式が等しい場合に、処理を実行 |
| ○○ != ○○ | 左側の式と右側の式が等しくない場合に、処理を実行 |
| ○○ < ○○ | 左側の数値が右側の数値よりも値が小さい場合に、処理を実行 |
| ○○ > ○○ | 左側の数値が右側の数値よりも値が大きい場合に、処理を実行 |
| ○○ <= ○○ | 左側の数値が右側の数値以下の場合に、処理を実行 |
| ○○ >= ○○ | 左側の数値が右側の数値以上の場合に、処理を実行 |
| ○○ in リスト タプルなど | 左側の値が右側のリストやタプル内に存在する場合に、処理を実行 |
| ○○ not in リスト タプルなど | 左側の値が右側のリストやタプル内に存在しない場合に、処理を実行 |
これらは、内部的には特殊メソッドが呼ばれています。
詳細は最後に説明します。
では、if文が実際にどのように実装されているのか見ていきましょう!
- if文の実装例
Example
- ifの後にインデント(空白)がない場合エラー
print('A == A')
- if文で等しいかどうか確認
print('A == A') # AとAは等しいので実行されるname = 'Taro'
if name == 'Taro':
pass # nameにはTaroが入っているため中の処理が実行される
if name != 'Taro':
pass # nameはTaroではないため中の処理が実行される
- if文で比較演算子を使用
age = 12
if age < 20:
pass # ageは20より小さいので実行される
age = 12
if age > 20:
pass # ageは20より大きくないので実行されない
age = 20 # ageに20を代入
if age <= 20:
pass # ageは20以下なので実行される
age = 20
if age >= 20:
pass # ageは20以上なので実行される
- if文でinを使用
fruit = 'lemon'
if fruit in ('apple', 'banana', 'orange'):
pass # fruit(apple)は()の中に存在しないので、実行されない
fruit = 'lemon'
if fruit in ('apple', 'banana', 'orange'):
pass # fruit(apple)は()の中に存在しないので、実行される
このように、==, !=, <, >, <=, >=, in, not inなどの演算子を用いて、if文の条件を記載し、条件に応じて実行できるできないを分けることができます。
elif, elseを使用した分岐の追加
elif, elseを使うと分岐を追加することができます。
つまり、ifの条件を満たさない場合の別の条件としてelifで様々な条件を繋いでいくことができます。
- elif, elseで様々な条件を繋いだ処理の概要

elifの条件は、ifの条件を満たさない場合しか確認されないません。
ifの条件を満たした場合、ifの条件内の処理が実行されて、elif, elseの処理は実行されませんので注意しましょう。
- elif, elseの実装例
Example
- elif, elseを使用したif文
if age < 20: # ifの条件
print('20未満')
elif age <= 60: # ifの条件を満たさない(20以上の場合)、条件を確認する
print('20以上60以下')
else:
print('60より大きい')
このように、if, elif, elseでifの条件を満たさない場合の処理を実装できます。
elifは1つだけでなく、複数つなぐこともできます。
論理型(boolean)、空文字、空のリストなど
この時は、特に条件式を記載せずに、変数名だけif文に置きます。そして、論理型の場合、Trueでは処理が実行されて、Falseでは処理は実行されません。
- 論理型のif文
Example
- 論理式をそのまま入れた場合のif文
if var: # varという変数がTrueの場合だけ、実行される(Falseの場合は実行されない)
print('something')
また、空文字列の変数を直接if文において、条件分岐させることもできます。
- 空文字列のif文
Example
- 空文字列を使ったif文
if msg: # 空文字の場合、if文ではFalseと判定されて中の処理は実行されない。
print('実行されない')
このように、空文字列の場合にはif文でFalseと判断され、中の処理は実行されません。
逆に何らかの文字列が入っている場合にはif文でTrueと判断され、中の処理は実行されます。
- 中に文字が入っている文字列変数のif文
Example
- 文字列が入った場合のif文
if msg:# 文字が入っている場合、if文ではTrueと判定されて中の処理は実行されない。
print('実行される')
では、各クラス毎にどの場合はTrueと判断されて処理が実行され、どの場合はFalseと判断されて処理が実行されないのか見ていきましょう。
- 型ごとの条件
| 型名 | Trueとなる場合 | Falseとなる場合 |
|---|---|---|
| 数値(int) | 0以外の正と負の値 | 0 |
| 浮動小数点数(float) | 0.0以外の正と負の値 | 0.0 |
| 文字列(str) | 空でない文字列 | 空の文字列 |
| リスト(list) | 空でないリスト | 空のリスト |
| タプル(tuple) | 空でないタプル | 空のタプル |
| 辞書(dict) | 空でない辞書 | 空の辞書 |
| セット(set) | 空でないセット | 空のセット |
- 変数を直接ifにセットした場合
Example
- listをそのまま使用したif文
if list_a: # listの中には値が入っているので実行される
print('実行される')
list_a = list() # 空のリスト
if list_a: # listは空なので実行されない
print('実行されない')
and、or、not、all、anyで複数の条件を繋げる
1. andを使用した場合(論理積)
○○ かつ ××
のような条件を判定することができます。
つまり、
Example
- andを使用したif文
pass
と記述した場合、msgの値がHelloでcolorの値がredだとifの中の処理が実行されます。
2. orを使用した場合(論理和)
○○ または ××
のような条件を判定することができます。
つまり、
Example
- andを使用したif文
pass
と記述した場合、msgの値がHelloまたは、colorの値がredだとifの中の処理が実行されます。
3. notを使用した場合(否定)
- 指定した条件がFalseの場合だけ実行される
というふうになります。
例えば、以下のように利用します。
if not 条件式:
Example
- notを使用したif文
pass # apple==lemonの条件が成立しない場合に実行される
if not age < 20:
pass # age<20の条件が成立しない場合に実行される
if fruit not in fruits_list:
pass # fruitがfruits_listの中に存在しない場合に実行される
4. allを使用した場合
allを利用した場合には、引数として指定したIterable(リスト、タプル等)なものが、全てTrueの場合のみ実行される。
- allの例
Example
- allを使用したif文
pass # 'A' == 'A', 21 > 12, 'A' != 'B'は全てTrueのため実行される
if all(('A'=='A', 21 > 12, 'A'=='B')):
pass # 'A' == 'A', 21 > 12はTrueだが、'A'=='B'はFalseのため実行されない
5. anyを使用した場合
anyを利用した場合には、引数として指定したIterable(リスト、タプル等)なものが、一つでもTrueの場合実行される。全てFalseの場合は実行されない。
- anyの例
Example
- anyを使用したif文
pass # 'A' != 'A', 21 <= 12はFalseだが、'A' != 'B'はTrueのため実行される
if any(('A'!='A', 21 <= 12, 'A'=='B')):
print('実行される') # 'A' != 'A', 21 <= 12, 'A' == 'B'は全てFalseのため実行されない
1行でif, elseを利用する
1行で記載できるような簡単な文の場合には、
〇〇 if 条件式 else ××
のような形で記載して、条件式がTrueの場合には○○の処理を実行、Falseの場合には××の処理を実行するとすることができます。
- 1行で記載したif else
Example
- 1行のif文
b = 330
# a > bの場合print('A')が実行され、それ以外a <= bの場合、print('B')が実行される。
print('A') if a > b else print('B')
# a > bの場合cにはa > bが、それ以外a <= bが格納される。
c = 'a > b' if a > b else 'a <= b'
print(c) # a <= b
ネストしたif文の記載

- ifをネストした場合の書き方
Example
- if文ネスト
if 条件2:
pass# 条件1がTrueで条件2がTrueの場合の処理
else:
pass# 条件1がTrueで条件2がFalseの場合の処理
else:
if 条件3:
pass# 条件1がFalseで条件3がTrueの場合の処理
else:
pass# 条件1がFalseで条件3がFalseの場合の処理
__bool__を用いたクラスの実装(ifの仕様詳細)
ここからは、if文の詳細について解説します。
ifを実行した場合、対象のインスタンスの特殊メソッド__bool__が呼ばれます。
__bool__のメソッドの返り値がTrueだった場合には、if文の中の処理が実行され、Falseだった場合には、if文の中の処理は実行されないせす。
- __bool__を利用した場合の書き方
Example
- __bool__の実装
def __bool__(self):
print('boolが呼ばれました')
return True
a = ClassA()
if a: # ClassAの__bool__メソッドは、Trueが返されるので中の処理が実行される。
pass
class Student:
def __init__(self, age):
self.age= age
def __bool__(self):
if self.age > 20: # self.ageが20より大きい場合にTrueを返す
return True
else:
return False # self.ageが20以下の場合にTrueを返す
student = Student(21)
if student:
pass # studentのself.ageは21で20より大きいため、__bool__でTrueが返され実行される
student = Student(12)
if student:
pass # studentのself.ageは12で20以下のため、__bool__でFalseが返され実行されない
セイウチ演算子の利用(python3.8以上)
セイウチ演算子とは、python3.8以上から実装された機能で、変数への値の代入と比較を同時に行うことができる機能です。
以下のように記載します。
変数 := 値
:= がセイウチの牙を生やした形に似ているので、セイウチ演算子と呼ばれています。
例えば、以下のように記載すると、aに12を代入して、そのあとに10より大きいかどうか比較することができます。
Example
- セイウチ演算子の例
pass # aに12を入れて、10より大きいか見ている。10より大きいので中の処理は実行される
以上、if文について詳細に解説いたしました。