Pythonプログラミング初心者に向けて、型(かた)の基本について解説します。

今回「型(かた)」という言葉を初めて聞きました。
「型」っていったいどういうものなんですか?

いままで「文字列」と「数値」を使ってPythonの勉強をいっぱいしてきました!
実は文字列や数値も厳密にはいろんな「型」に分類されるんです!
これまで何気なく「文字列」や「数値」を扱ってきましたが、実はPython内部では変数に入っている値によってデータの格納され方が違います。
例えば、「文字列」は「文字列型(str型)」というデータ形式で内部的に保存されています。
まずはこれまで扱ってきたデータの「型」分類を見ていきましょう。
基本的な型の一覧
これまで扱ってきた変数や値は以下の型に分類されます。
変数の場合、代入されているものに合わせて型が決まります。
型の名前 | 各型の例 | 補足 |
文字列型(str型) | str1 = "文字列" | これまで扱ってきた「文字列」は 文字列型(str型)です。 |
整数型(int型) | num_int = 10 | これまで扱ってきた「数値」のなかで、 「整数」を用いた場合、整数型(int型)です。 |
小数型(float型) | num_float = 3.7 | これまで扱ってきた「数値」のなかで、 「小数」を用いた場合、小数型(float型)です。 |
ここで紹介した型以外にも「リスト型(list型)」「タプル型(tuple型)」など、本当に多くの型があります。
いまは「他にも型があるんだ~」ぐらいの理解で問題ありません!

何気なく使っていた変数や値に「型」があったなんて知らなかったです。
でも「型」という考え方を知っておく良いことがあるんですか?

良い質問ですね!
異なる型同士を扱う時には注意しないといけないことがあるんです!
一緒に学んでいきましょう!
異なる型同士は数値演算子が使えない
これまで数値の計算や文字列の連結といった記事で演算子(「+」や「*」)を使ってきましたが、基本的に異なる型同士の値や変数では演算子を使うことはできません。
以下のプログラムを実行するとエラーとなります。
# 文字列型(str型)と整数型(int型)の足し算
print("文字列" + 3)
"""
実行結果
-----------------------------------------
TypeError Traceback (most recent call last)
Input In [7], in <cell line: 1>()
----> 1 print("文字列"+3)
TypeError: can only concatenate str (not "int") to str
"""
実行すると「TypeError」というエラーが出力されたと思います。
エラーの末尾には、
TypeError: can only concatenate str (not "int") to str
翻訳すると
「タイプ(型)エラー:str型へは("int型"ではなく)str型のみ連結できます。」
と表示されています。
このように異なる型同士を演算子で計算することはできないのです。
文字列型(str型)と小数型(float型)の場合も同様です。
# 文字列型(str型)と小数型(float型)の足し算
print("文字列" + 3.7)
"""
実行結果
-----------------------------------------
TypeError Traceback (most recent call last)
Input In [10], in <cell line: 2>()
1 # 文字列型(str型)と小数型(float型)の足し算
----> 2 print("文字列"+3.7)
TypeError: can only concatenate str (not "float") to str
"""

異なる型同士は計算できないんですね..
でも計算できる型はないんですか?

実はこれまで数値として扱ってきた「整数のint型」と「小数を含むfloat型」同士は計算できるんです!
他のプログラム言語ではできないものも多いけど、Pythonはこのあたりが柔軟なんです!
例外として、Pythonでは整数の「int型」と小数の「float型」を足すと、自動的に小数を含む「float型」に変換して計算します。
# 例外
# 整数型(int型)と小数型(float型)の足し算
print(2 + 3.7)
#計算結果は小数型(float型)となる
#実行結果 5.7
ここまでで、整数型(int型)と小数型(float型)は計算できますが、基本的には異なる型同士は演算子が使えないことがわかりました。
では、文字列と数値を連結したい場合にはどうすれば良いのでしょうか?
この時、用いるのが「型の変換」です。
型の変換
以下の例ではstr型(文字列)とint型(整数値)の変数を連結して「ごまこは3食、食べる!」とした変数を作ろうとしていますが、型の異なる値を連結しようとしているのでエラーとなります。
#int型の変数cnt
cnt = 3
#int型の変数cntと文字列を連結
eat_cnt = "ごまこは" + cnt + "食、食べる!"
"""
実行結果
-----------------------------------------
TypeError Traceback (most recent call last)
Input In [28], in <cell line: 5>()
2 cnt=3
4 #int型の変数cntと文字列を連結
----> 5 eat_cnt="ごまこは"+cnt+"食、食べる!"
TypeError: can only concatenate str (not "int") to str
"""
Pythonでは他の型に値を型変換するための関数が用意されています。
文字列str型に変換する関数は「str()」、整数int型に変換する関数は「int()」、小数float型に変換する関数は「float()」となります。
関数名が型の名前と同じなので分かりやすいですね!
これらの関数のうち、str関数「str()」を用いて、int型の変数をstr型に変換すれば、さきほどのコードも実行できます。
#int型の変数cnt
cnt = 3
#int型の変数cntをstr型に変換して
#文字列同士で連結
eat_cnt = "ごまこは" + str(cnt) + "食、食べる!"
print(eat_cnt)
#実行結果 ごまこは3食、食べる!
「str(cnt)」の部分で変数cntに入っている整数値3は文字列の"3"に変換されています。
このため、文字列同士の連結となり意図通りに連結ができました!

型変換することで文字列として連結できました!

型の世界は奥が深いんです!
ベテランプログラマーもプログラムが複雑になると型の処理間違いをしてしまうんです!
次回も引き続き、型について勉強するからこの機会に基本を理解してほしいです!
まとめ
いかがでしたでしょうか。
今回は型の基本・型の変換について詳しく解説しました。
次回からもPython初心者に向けて、詳しく解説していきます。
お楽しみに!
このサイトの記事一覧へは以下へアクセス!
コメント