型変換とキャスティング | 基本データ型 | Python本格超入門

スポンサーリンク
スポンサーリンク
amazon
スマイルSALE
--:--:--
~
ad. 価格範囲を指定して商品を探せます

型変換とキャスティング

Pythonでは、データ型が異なる値を操作する際に、型の変換が必要になる場合があります。この変換は「型変換」や「キャスティング」と呼ばれ、Pythonでは非常に簡単に行うことができます。この章では、基本的な型変換の方法とその注意点について解説します。

型変換とは?

型変換(キャスティング)とは、あるデータ型の値を別のデータ型に変換することを指します。Pythonでは、明示的な型変換(関数を使って手動で変換すること)と暗黙的な型変換(Pythonが自動で変換すること)の2種類があります。

明示的な型変換

明示的な型変換では、特定の関数を使用してデータ型を変更します。主な型変換関数は以下の通りです。

関数 説明
int() 浮動小数点数や文字列を整数に変換します。
float() 整数や文字列を浮動小数点数に変換します。
str() 整数や浮動小数点数を文字列に変換します。

以下は、明示的な型変換の具体例です。

# 明示的な型変換の例
x = "10"
y = 3.14

# 文字列から整数へ変換
x_int = int(x)
print(x_int)  # 10 (整数)

# 浮動小数点数から整数へ変換
y_int = int(y)
print(y_int)  # 3 (小数点以下切り捨て)

# 整数から文字列へ変換
z = 20
z_str = str(z)
print(z_str)  # '20' (文字列)

暗黙的な型変換

Pythonは、必要に応じて自動的にデータ型を変換することがあります。これを「暗黙的な型変換」と言います。通常、整数型(int)と浮動小数点数型(float)の演算において、Pythonはより表現力の高い「浮動小数点数型」に自動的に合わせて計算を行います。これにより、計算結果の精度が失われるのを防いでいます。

# 暗黙的な型変換の例
a = 5  # 整数
b = 2.5  # 浮動小数点数

# Pythonが自動で型を変換して計算
result = a + b
print(result)  # 7.5 (浮動小数点数に変換される)

この例では、整数と浮動小数点数が足し算される際に、自動的に浮動小数点数に変換されます。なお、文字列と数値の間では、このような暗黙的な型変換は行われないため、必ず手動で明示的な型変換を行う必要があります。

型変換時の注意点

型変換を行う際には、いくつかの注意点があります。特に、型変換が失敗する場合や、意図しない結果が発生する可能性があります。以下にその例を示します。

# 型変換が失敗する例
value = "Python"

# int()で文字列を整数に変換しようとするとエラー
# x = int(value)  # これは ValueError になります

# 浮動小数点数を整数に変換すると小数点以下が切り捨てられる
pi = 3.14159
pi_int = int(pi)
print(pi_int)  # 3(四捨五入ではなく一律で切り捨てです)

文字列が純粋な数値形式(例:"123")でない場合、int()やfloat()で変換しようとすると ValueError というエラーになります。また、浮動小数点数を整数に変換する際には、四捨五入ではなく小数点以下が「一律切り捨て」られる点に注意が必要です。

追加解説:小数点以下を「四捨五入」して型変換したい場合

前述の通り int() は単なる切り捨てを行うため、数値を正しく四捨五入して整数にしたい場合は、組み込み関数の round() を挟んでから型変換(またはそのまま利用)を行います。

val1 = 3.6

# そのまま int() を使うと「3」になる
print(int(val1))  # 3

# round() を使って四捨五入してから変換する
rounded_val = round(val1)
print(rounded_val)  # 4

型チェック

型変換を行う前に、isinstance()関数を使って変数の型を確認することができます。これにより、予期しないエラーを回避できます。isinstance(変数, 型) と書くことで、指定した型と一致しているかを True または False で判定してくれます。

# 型チェックの例
x = "100"

if isinstance(x, str):
    x_int = int(x)
    print(x_int)  # 100 (整数)
else:
    print("xは文字列ではありません")

追加解説:文字列の中身が「数字かどうか」を判定して安全に変換する

isinstance(x, str) を使えば「文字列かどうか」はチェックできますが、もし文字列の中身が "Python" のようなテキストだった場合、やはり int() でエラーになってしまいます。中身がきちんと数字の並びになっているかを1歩踏み込んで判定するには、文字列型に用意されている .isdigit() メソッドを組み合わせるのが非常に実用的です。

user_input = "123a"  # 誤ってアルファベットが混ざってしまった入力

# 中身がすべて純粋な数字(0-9)だけで構成されているか判定
if user_input.isdigit():
    num = int(user_input)
    print(f"変換成功: {num}")
else:
    print(f"警告: '{user_input}' は数値に変換できない文字が含まれています")

まとめ

Pythonでは、型変換を使って異なるデータ型を扱うことができます。明示的な型変換や暗黙的な型変換を正しく理解することで、データの処理や計算をより柔軟に行うことが可能です。また、型変換時の注意点に留意し、isinstance() や .isdigit() などのチェックを行うことで、予期しない実行エラー(クラッシュ)を防ぐ堅牢なコードを書くことができます。