リファクタリングをPythonで実践!基本手法とコード例・注意点まで
Pythonプログラムで整数を扱う時によく使用するint型オブジェクト。Pythonの基礎であるintについて詳しくご紹介します。
1.Pythonのint型オブジェクトとは?
Pythonのint型オブジェクトは、整数を格納したデータ型で以下のように表現できます。
my_number = 100
print(type(my_number))
print(my_number)
結果
<class 'int'>
100
int型オブジェクトは、主に計算やデータベースへ値を記録する際に使用します。
またint型オブジェクトはstr関数を使用しint型から文字列に変換したり、int関数でfloat型からint型に変換できる特徴があります。
つまり整数を文章の中で表現したり、計算で用いたり、プログラムの中で臨機応変に数値を扱えるということです。
2.int関数とは?
int関数は、文字列をint型に変更したり、float型をint型に変更できる関数です。
int()の引数に値を入れるだけで整数型に変換してくれるので、 print(int(‘1000’))などのように関数内で使用したり、int(‘100’) > 10 など演算子内で使用することも可能です。
3.int関数の使い方
int関数の基本的な使い方を3つご紹介します。
①基本構文
前の項で解説した通り、基本的な使い方は、int関数の引数に変換したいオブジェクトを指定するだけです。
int(変換したいオブジェクト)
まずは、整数を引数として渡したサンプルソースを見てみましょう。
my_number = int(100)
print(type(my_number))
print(my_number)
結果
<class 'int'>
100
int関数に整数の100を入れると、元のint型のまま出力されます。
では真偽値をint関数に入れるとどうなるでしょうか。
a = True
print(a)
print(int(a))
b = False
print(b)
print(int(b))
結果
True
1
False
0
int関数を使うことで真偽値を1と0に変換できました。
②文字列をint型に変換
文字列として扱われている数値を計算で使用したい場合などは、文字列をint型に変換する必要があります。
my_text = '100'
print(type(my_text))
print(my_text)
my_int = int(my_text)
print(type(my_int))
print(my_int)
結果
<class 'str'>
100
<class 'int'>
100
int関数に’100’を入れることで、文字列からint型に変換できました。
③float型をint型に変換
小数点を含む値を整数型に変換したい場合も、int関数を使用すると簡単に型変換ができます。
my_float = 1.5
print(type(my_float))
print(my_float)
my_int = int(my_float)
print(type(my_int))
print(my_int)
結果
<class 'float'>
1.5
<class 'int'>
1
このとき、小数点以下は切り捨てられて、整数になっていることが確認できますね。
小数点以下を四捨五入したい場合は、round関数を使用すると簡単に四捨五入が実行できます。方法についてはのちほど解説します。
4.int関数の注意点
int関数は便利な一方で、いくつか注意する必要があります。
①小数点が切り捨てになる
前項で説明した通り、float型をint関数で整数化した場合は、小数点以下の数字が切り捨てられることに注意が必要です。
以下に例を記します。
my_float = 3.64
print(type(my_float))
print(my_float)
my_int = int(my_float)
print(type(my_int))
print(my_int)
結果
<class 'float'>
3.64
<class 'int'>
3
小数点以下の.64は、int関数で切り捨てられていることが確認できます。
小数点以下を四捨五入したい場合はround関数を使う
小数点以下を四捨五入したい場合は、先ほど説明した通りround関数を使用しましょう。
my_float = 3.64
my_number_0 = round(my_float)
my_number_1 = round(my_float, 1)
my_number_2 = round(my_float, 2)
my_number_3 = round(my_float, 3)
print(type(my_number_0))
print(my_number_0)
print(type(my_number_1))
print(my_number_1)
print(type(my_number_2))
print(my_number_2)
print(type(my_number_3))
print(my_number_3)
結果
<class 'int'>
4
<class 'float'>
3.6
<class 'float'>
3.64
<class 'float'>
3.64
round関数のふたつ目の引数で小数点の桁数を指定し、四捨五入できます。第二引数がない場合(変数my_number_0)は、小数点以下表示なしで四捨五入されます。
また、元の小数点以下の桁数より大きい数(変数my_number_3)を第二引数で指定した場合は、四捨五入なしで出力されていることが確認できますね。
②小数点を含む文字列を処理するとエラーになる
小数点を含む文字列をint関数で処理すると、以下のようなエラーが発生します。
my_text_float = '3.64'
my_text_int = int(my_text_float)
print(my_text_int)
結果
ValueError: invalid literal for int() with base 10: '3.64'
段階的に型変換を行う
文字列の数字に小数点以下がある場合は、文字列からfloat型、float型からint型と段階を経て型変換を行う必要があります。
my_text_float = '3.64'
my_text_int = int(float(my_text_float))
print(my_text_int)
結果
3
③余分な文字を含んでいるとエラーになる
int関数に割り当てる引数に文字が含まれているとエラーが発生します。
my_text = '32歳'
print(int(my_text))
結果
ValueError: invalid literal for int() with base 10: '32歳'
不要な文字を削除してから変換する
このような場合は、不要な文字を削除し、数字だけをint関数に割り当てれば、文字列を整数として扱えます。
my_text = '32歳'
my_text = my_text.replace('歳', '')
print(int(my_text))
結果
32