基本的なifの機能は if に続く式が TrueかFalseのどちらかの値をとることにより処理が分岐します。if で条件を満たしたとき、あるいは満たさなかったときは、その条件により処理の振り分けができます。その振り分けの部分をPythonでは節もしくは ‘クローズ(clause)’ と呼び、クローズは ‘:’ の記号で示す ‘ヘッダ(header)’ と、それに続く ‘スイート (suite)’ からなります。スイートは 1つインデントが深くなります。Pythonではインデントが処理構造に意味をもつので正しくインデントすることが必要です。
if 評価 :
Trueのときの処理
else:
Falseのときの処理
下の例は2つの整数の比較です。比較演算子 ‘>’ によって、変数xと変数yが比較演算され、その結果がTrueかFalseの値を取ります。xには1、yには2が入っているので x > y の演算は False の値を取ることになります。なお比較演算(比較演算子)とブーリアン演算については ‘比較演算・ブーリアン演算のページ’ を参照してください。
# File: ifsample.py
# 整数の比較
x=1
y=2
if x > y :
print('x is greater than y')
else:
print('x is not greater than y')下の例ではaとbが同じ内容で出力され、そして ‘a==b’ と ‘a is b’ が出力されます。 そして最後のid()の値も同じです。idが同じであれば同じインスタンス・オブジェクトということになります。オブジェクト指向なので、インスタンスの中身が同じか、それともインスタンスそのものが同じか、という比較があるので、その部分は注意が必要です。
# if 内容が同じか、オブジェクトが同じか
a= 'abc'
b= 'a' 'b' 'c'
print(a)
print(b)
if a == b:
print('a==b')
else:
print('a!=b')
if a is b:
print('a is b')
else:
print('a is not b')
print(id(a))
print(id(b))この例ではaとbが同じ内容で出力され、そして ‘a==b’ と ‘a is not b’ が出力されます。 aとbの中の文字列は同じですが、’ab’のオブジェクトに’c’を加えてbに代入しています。最後のid()の値は別々になっています。つまり’ab’を作りbに入れ、次にbに’c’を加えてbに代入すると別のインスタンス・オブジェクトになっているということになります。
# if 内容が同じか?オブジェクトが同じか?
a= 'abc'
b= 'a' 'b'
b= b + 'c'
print(a)
print(b)
if a == b:
print('a==b')
else:
print('a!=b')
if a is b:
print('a is b')
else:
print('a is not b')
print(id(a))
print(id(b))
関数id()を使うことで同じインスタンス・オブジェクトであるかを比べることができます。
#aとbは同じオブジェクト
a='abc'
b='abc'
if ( id(a) == id(b) ):
print("a is b")
else:
print("a is not b")
b='ab'
b=b+'c'
#aとbは異なるオブジェクト
if ( id(a) == id(b) ):
print("a is b")
else:
print("a is not b")
#cとbは同じオブジェクト
c=b
print(id(b))
print(id(c))if文のelseの条件が当てはまり、さらにそこに続いてifを書く場合もelifを使うことができます。。pythonでは下記のようなelifを使うことで条件によりふるいをかける表現が可能です。
a='abc'
b='efg'
c='abc'
if ( a == b ):
print('a==b')
elif ( a == c ):
print('a==c')
else:
print('a != b and a != c')Python 3.10 (2021年10月リリース)からmatch … caseが使えるようになったので、条件が多い場合はmatchを使った書き方を推奨します。