PR
Python

【Python】変数に代入する値の型とは何か、型の種類や型変換について解説

タイプライターの画像 Python

前回の記事でプログラミングの変数について、Pythonでの変数の使い方について学びました。

では、今回は変数に代入する値について解説したいと思います。

この記事を読んで分かること
  • Pythonで使用する型の種類について(int型、float型、str型、bool型)
  • 型宣言や型変換についての方法
スポンサーリンク

値には型が存在する

変数と値って何でしたっけ?

前回の記事で、変数の説明の際に下記プログラムを使いましたが、もう一度おさらいしておきましょう。

x = 1
y = 2
z = x + y

nm = "どうも、僕です"
print(nm)

上記で、1,2行目の変数x,yに代入している値は「数字(整数)」です。
一方で、5行目の変数nmに代入している値は「文字列」です。

これらの値は種類としては別のものです。

つまり、変数に代入する値には種類が存在します。

その値の種類のことをプログラミングでは「型」といいます。

Pythonでプログラミングをする際、値には様々な種類の型があり、型によって使い方や働き方が違ってきます

ですので、どういった型があるかを事前に知っておく必要があります。

Pythonで使用する型はいくつかありますが、ここでは4つ覚えておきましょう。

Pythonでは基本この4つを覚えていれば大丈夫です

int型(整数)

整数の値はint型という型になります。

具体的に示すと以下になります。

x = 1
y = -2
z = x + y
print(z)     # -1

はい、整数なのでわかりやすいですね。

こういった整数を表す型をint型と呼びます。

ちなみにですが、値がどの「型」であるかを調べる方法として「type」メソッドを使います。

下記のようにtypeメソッドをprintメソッドで表示してみましょう。

x = 1
y = -2
z = x + y
print(type(x))   # <class 'int'>
print(type(y))   # <class 'int'>
print(type(z))   # <class 'int'>

「<class ‘int’>」と表示されますので、変数x,y,zは全てint型ということが分かります。

ちなみにですが、プログラミングをしていると10進数以外にも、2進数や8進数や16進数を扱うことがあります。

10進数以外の場合でも型はint型で大丈夫ですが、値を入力する際にそれが10進数ではないことを示すために数字の前に以下の文字をつけます

  • 2進数 → 0b
  • 8進数 → 0o
  • 16進数 → 0x

例えば2進数、8進数、16進数で、10進数の「100」を表したい場合は以下となります。

x = 0b1100100    # 2進数で「100」
y = 0o144        # 8進数で「100」
z = 0x64         # 16進数で「100」
print(x)         # 100
print(y)         # 100
print(z)         # 100
print(type(x))   # <class 'int'>
print(type(y))   # <class 'int'>
print(type(z))   # <class 'int'>

float型(浮動小数点数)

int型は整数でしたが、少数の場合はどうでしょうか。

またint型で表せないほどの非常に大きな数字の場合はどうでしょうか。

そういった少数や非常に大きな整数の場合は、froat型を使います。

プログラミングをかじった経験のある方は「浮動小数点数」という言い方のがしっくり来ると思いますが、整数では扱えないような非常に大きな数字や小数点以下といった小さな数字を扱う場合はこのfloat型を使います。

x = 10.0
y = 0.00035
z = 1234.567
print(x)         # 10.0
print(y)         # 0.00035
print(z)         # 1234.567
print(type(x))   # <class 'float'>
print(type(y))   # <class 'float'>
print(type(z))   # <class 'float'>

ここで注目して頂きたいのが1,4,7行目です。

変数に「10.0」と「.0」を付けると型が「<class ‘float’>」となり、「10.0」はfloat型と認識されます。

ちなみに変数に「10」と代入すると型はint型となります

はいその通り、先ほどint型のところで習いましたよね。

また、非常に大きな数字の時にはfloatを使うと言いましたが、例えばEという記号を使えば10の乗数という形で大きな数字を表すことも出来ます。

x = 5.67E9   # 5.67*10^9
print(x)       # 5670000000.0

str型(文字列)

文字列を表す型はstr型といいます。

Pythonでは文字列を使う場合に、ダブルクォーテーションもしくはシングルクォーテーションを使って値を代入すればstr型になります。

x = "こんにちわんこそば"
y = 'さようなラスベガス'
print(x)         # こんにちわんこそば
print(y)         # さようなラスベガス
print(type(x))   # <class 'str'>
print(type(y))   # <class 'str'>

ちなみに数字もダブルクォーテーションで囲めば数字ではなく文字列として扱います。

x = "13"
print(x)         # 13
print(type(x))   # <class 'str'>

y = 1
print(x + y)     # TypeError: can only concatenate str (not "int") to str

上記のプログラムでいうと、6行目の処理でエラーとなります。

理由は整数(int型)と文字列(str型)を使って計算をしようとしたからです。

計算をする場合は文字列ではなく、int型やfloat型の値で計算しなければなりません。

また、ダブルクォーテーションもシングルクォーテーションも機能としては同じですが、例えば文字列で「”」を使いたい場合は、ダブルクォーテーションでは文字列として使用できないのでその場合はシングルクォーテーションを使います

x = "いわゆる"ニヒル"なやつで通ってます"   # NG : SyntaxError: invalid syntax
print(x)

y = 'いわゆる"ニヒル"なやつで通ってます'
print(y)                              # OK : いわゆる"ニヒル"なやつで通ってます

bool型(真偽値)

最後はbool型です。

このbool型は少し特殊で値が2つしかありません。

  • True = 真(正しい)
  • False = 偽(間違っている)

値が2つしかない型に何の意味があるの?

bool型というのは恐らくプログラミング言語特有の概念かもしれませんが、プログラムを書く上で真か偽かと言う判定はよく出てきます

その際に真偽の判定を例えば数字で表した場合

  • 0 → 正しい
  • 1 → 間違い

と定義することも可能ですが、その際0と1がどっちか真で偽かということがぱっと見わかりますでしょうか

また、2という数字がきた場合にどう対処すれば良いでしょうか

また、文字列で

  • ”True” → 正しい
  • “False” → 間違い

と定義しても良いかもしれませんが、もしスペルミスして”true”としてしまったらどうなるでしょうか。

また、“True”や”False”以外の文字列がきた場合はどうすれば良いでしょうか

そういう意味だと、bool型はTrueかFalse以外の値は存在しませんので、判定でbool型を使えば値を間違えるというプログラムのミスはなくなります

変数の型としては使うことはほぼないかと思いますが、値としては非常によく使う型です。

print(0 < 1)         # True
print(0 > 1)         # False
print(type(0 < 1))   # <class 'bool'>
print(type(0 > 1))   # <class 'bool'>
スポンサーリンク

変数と型について

上記で説明した型を変数に値として代入するのですが、Pythonでの代入方法が他の言語と少し異なります

それは変数に値を入れる際に変数に型を定義する必要が無いのです。

つまり、型はプログラマーではなくPython自身が自動で判別してくれます

型宣言

例えば以下のようにPythonでは値によって型が自動判別されますので、プログラマーは「変数=値」を書けば意識することはなく普通に変数として使用できます

x = 100                 # int型
y = 34.76               # float型
z = "どうも、僕です"      # str型

では他の言語はどうか。

例えば、C言語やJavaはというと、変数を使う際に必ずその変数の型を宣言する必要があります。

例えば上記Pythonの変数をJavaで表すと以下のプログラムとなります。

int x = 100;
float y = 34.76;
string z = "どうも、僕です";

各変数の前に型が書いてあります。

これを型宣言と言います

この型宣言がPythonにはありません

ですので変数は代入した値の型になります

なので下記のように同じ変数に型の異なる値を入れることも出来てしまいます。

x = 100
print(x)   # 100

x = 45.789
print(x)   # 45.789

x = "イェーイ、ジャースティース"
print(x)   # イェーイ、ジャースティース

x = 100
print(x)   # 100

ちなみにこれがJavaの場合、変数宣言時に型も合わせて設定するので、int型の変数はint型の値、string型の変数はstring型の値しか入りません

これが、Javaを経験している人がPythonを使うと違和感があるところかと思います。

というか、型宣言なしに変数を使うのって違和感ありまくりです

その気持ちすごい分かります。

というのもPythonでは、その変数が何の型なのかぱっと見全くわからないのです。

よくわからないまま値を入れちゃうととりあえず値としては入っちゃうので、実行してみて思わぬ値が入っていてエラーになるというのはよくあります。

ですので、変数はあまり色々な型の値をあれこれ入れないで、ある程度型を意識して使う必要があります。

まあ、慣れたらどうってことないけどね

キャスト(型変換)

最後に、型というのは別の型に変更することができます

例えば文字列の所で説明しましたが、1行目の整数もダブルクォーテーションで囲えば文字列になります。

x = "13"
print(x)         # 13
print(type(x))   # <class 'str'>

y = 1
print(x + y)     # TypeError: can only concatenate str (not "int") to str

ですが、6行目のstr型とint型で計算しようとすると型の不一致でエラーとなります。

原因は1行目の「13」が文字列なので、こちらを整数の型に変更してあげれば良いです。

x = "13"
print(x)         # 13
print(type(x))   # <class 'str'>

y = 1
z = int(x)
print(z + y)     # 14
print(type(z))   # <class 'int'>

6行目で変数zにstr型のxをint型に変更して代入しています。

これでzを使ってint同士で計算ができるようになりました。

こういったある型を別の型に変更することをキャスト(型変換)と言います。

ちなみに上記ではint型にキャストしましたが、それぞれの型をキャストする方法は以下となります。

  • int(値)→ int型にキャスト
  • float(値)→ float型にキャスト
  • str(値)→ str型にキャスト
  • bool(値)→ bool型にキャスト
スポンサーリンク

まとめ

今回は、Pythonで使用する値の型について、具体的な型の説明と他の言語との違いやキャスト(型変換)について述べました。

次回は、変数や値のデータ構造について記載したいと思います。