Pythonでは、変数にどんな値を入れるかによって、できる処理や結果が大きく変わります。整数や小数、文字列や真偽値など、「データ型」を正しく理解して使い分けることは、プログラムを自在に動かすための第一歩です。
Pythonの基礎
🟣 Pythonの基礎知識(入門編)
📌はじめてでも安心!Pythonで「動く感動」を味わえる超やさしい入門ステップ
🟣Pythonの基礎知識(基礎編)
📌基本文法から実用テクニックまで、Pythonの土台をしっかり固めるステップアップ講座
├─【Pythonの基礎知識】Pythonのデータ型を正しく使いこなす!
├─【Pythonの基礎知識】条件分岐の完全理解(if, elif, else)
├─【Pythonの基礎知識】繰り返し処理の深掘り(for, while)
├─【Pythonの基礎知識】Pythonコレクション型の正しい選び方
├─【Pythonの基礎知識】関数を使ってコードを整理しよう
├─【Pythonの基礎知識】try-exceptで学ぶPythonの例外処理
├─【Pythonの基礎知識】Pythonのファイル操作を完全理解
├─【Pythonの基礎知識】モジュールとライブラリを使う方法
├─【Pythonの基礎知識】Pythonのクラスとオブジェクトを最初に学ぶ
└─【Pythonの基礎知識】よく使う内蔵関数のまとめ
🟣Pythonの基礎知識(実践編)
📌知識を活かす実践編!ミニアプリや業務自動化で「できる」を実感できる構成
この記事では、Pythonの代表的なデータ型(int, float, str, bool, None)について、それぞれの特徴や違い、演算や型変換の注意点までをわかりやすく整理します。初心者でも理解できるように、コード例とともに実践的な使い方を紹介していきます。
データ型とは?
この記事では、Pythonが持つ基本的なデータ型(数値、文字列、真偽値など)と、それらの扱い方・変換方法・判定方法を体系的に整理していきます。
入門編では print()や if、 forなどを通して、「Pythonってこう書けば動くんだ!」という体験をしてきましたよね。
でも実際にコードを書いていくと、次のような場面に遭遇します。
print("3" + 3)
このコードを実行すると、Pythonはこう言ってきます。
TypeError: can only concatenate str (not "int") to str
文字列と数値をそのまま足そうとすると、Pythonは「型が違う!」と怒って止まってしまうのです。
ここで初めて、「Pythonって、変数の中身が“どんな種類のデータか”を意識してるんだな」と気づきます。これが「データ型」の正体です。
なんとなく使っていた x = 10の「10」が intであること、 "10"とはまったく別物であること、そういった型の違いによる「動きの違い」を知ることが、より正確なPythonコードを書く第一歩になります。
Pythonでは、変数に格納される「値の種類」によって、実行できる処理や演算が異なります。この値の種類をデータ型と呼びます。
たとえば、数値型と文字列型では「足し算」の意味がまったく異なりますし、「真偽値」は条件判定で頻繁に登場します。ここでは、Pythonの基本的なデータ型について整理していきましょう。
Pythonで扱う代表的なデータ型
Pythonには多くのデータ型がありますが、最初に覚えるべき基本の型は次の5つです。
データ型 | 用途・意味 | 例 |
---|---|---|
int | 整数を表す型 | 10、-3、0 |
float | 小数を表す型 | 3.14、-0.5、2.0 |
str | 文字列(テキスト)を表す型 | "hello"、'Python' |
bool | 真か偽か(論理値) | True、False |
NoneType | 「値が存在しない」ことを表す特殊型 | None |
型の確認方法
変数にどのデータ型が入っているかは、 type()関数で確認できます。以下は実際の例です。
x = 5
print(type(x)) # 出力:<class 'int'>
出力結果
<class 'int'>
type()関数の出力例
Pythonの type()関数を使うと、変数に格納された値の「データ型(クラス)」が明確に表示されます。以下の表は、代表的な値に対する type()の出力例です。
変数の値 | type(変数) の出力 |
---|---|
10 | <class 'int'> |
3.14 | <class 'float'> |
"abc" | <class 'str'> |
True | <class 'bool'> |
None | <class 'NoneType'> |
PythonのNoneは「null」と同じ?
Pythonにおける Noneは、他の言語でいう「null」とほぼ同じ意味を持ちます。何も値が設定されていない状態を示す、特殊なオブジェクトです。
ただし、Pythonでは NoneはNoneTypeという特別な型の定数として扱われており、単なる空データではなく明確な「意味のある値」として使われます。
各言語における「何もない」を示す値の比較
言語 | 空を表す値 |
---|---|
Python | None |
Java | null |
JavaScript | null、undefined |
C / C++ | NULL または nullptr |
Noneが使われる代表的なケース
Noneは以下のような場面で使われます。
- 初期値を設定せず、変数が未定義であることを明示する
- 関数が値を返さなかった場合の戻り値
- 条件式で「未設定かどうか」を判断したいとき
Noneの判定方法(is演算子)
Noneの判定には、 is演算子を使うのが一般的です。
x = None
if x is None:
print("値が未設定です")
出力:
値が未設定です
注意:NoneはFalseではない
Noneは条件判定で Falseとして扱われますが、Falseそのものではありません。 Noneと Falseは別のオブジェクトです。
Pythonでは型の宣言が不要
Pythonは「動的型付け言語」と呼ばれ、変数を使う際に型を明示的に宣言する必要がありません。代入された値の内容によって、Pythonが自動的に適切なデータ型を判断します。
次の例では、整数を代入すると int型、文字列を代入すると str型として扱われます。
x = 10 # int型になる
x = "hello" # str型に変わる
このように、同じ変数に対して異なる型の値を再代入することも可能です。ただし、型が意図せず変わってバグを生むこともあるため、意識的に使うことが大切です。
なお、Python 3.5以降では型アノテーション(型ヒント)によって、変数に「想定される型」を記述することもできますが、これは強制ではなく補助的な情報として扱われます。
name: str = "BePro"
age: int = 25
型アノテーションはあくまで静的解析やドキュメントの補助として活用されるものであり、Python自体は型を厳密にチェックしません。
数値(int, float)の基本と演算の違い
入門編で数値を扱ったとき、「普通に計算できるからそれでいい」と思ったかもしれません。
しかし、Pythonには「整数(int)」と「小数(float)」という2つの異なる数値型が存在し、それによって演算結果や挙動が変わることがあります。
このセクションでは、 intと floatの違いを「結果がどう変わるか」という視点から体験しながら理解していきます。
Pythonでは、整数( int型)と小数( float型)は厳密に区別されます。見た目は似ていますが、演算や出力結果に違いがあるため、それぞれの型の特徴を正しく理解することが重要です。
また、演算の種類や結果に応じて、型の自動変換(暗黙的キャスト)が発生するケースもあるため、初心者が混乱しやすいポイントでもあります。
int型とfloat型の違い
intは整数(1, 100, -5など)を扱う型で、 floatは小数(3.14, -0.5, 0.0など)を扱います。それぞれの特徴は以下の通りです。
型 | 特徴 | 例 |
---|---|---|
int | 小数点を含まない整数。演算結果も整数になる | 1、-10、0 |
float | 小数点を含む数値。演算結果は小数になることが多い | 3.5、0.0、-7.25 |
型の違いによる演算結果の変化
同じ加算演算でも、 intと floatの組み合わせによって、出力結果の型が異なります。Pythonでは以下のように処理されます。
a = 10
b = 3.5
print(a + b) # 出力:13.5(floatになる)
出力結果
13.5
このように、 int + float の結果は自動的に float になります。これは「より精度の高い型」に合わせるPythonの設計思想に基づいています。
int型とfloat型を演算した結果の型
Pythonでは、異なる数値型( intと float)を演算した場合、より精度の高い float型に自動変換されます。
次の例では、整数 10と小数 3.5を加算し、その結果の型を type()関数で確認しています。
a = 10
b = 3.5
print(type(a + b))
このコードを実行した結果は以下のように表示されます。
出力結果
<class 'float'>
このように、整数 + 小数の演算結果はfloat型になるという点は、Pythonの自動型変換(型の昇格)として覚えておくと良いでしょう。
数値演算に使う演算子の一覧
Pythonでは、さまざまな演算子を使って数値を操作できます。加算・減算だけでなく、商・余り・べき乗なども用意されています。
演算子 | 用途 | 記述例 | 結果 |
---|---|---|---|
+ | 加算 | 3 + 2 | 5 |
- | 減算 | 7 - 4 | 3 |
* | 乗算 | 2 * 6 | 12 |
/ | 除算(結果は常にfloat) | 10 / 4 | 2.5 |
// | 切り捨て除算(商の整数部分) | 10 // 4 | 2 |
% | 余り | 10 % 4 | 2 |
** | べき乗 | 2 ** 3 | 8 |
float型の注意点:丸め誤差
float型は内部的には2進数で扱われるため、正確に表現できない小数が存在します。特に比較処理で意図しないバグを生むことがあるため、注意が必要です。
x = 0.1 + 0.2
print(x) # 出力:0.30000000000000004
このような丸め誤差が発生する場合は、 round()関数などで明示的に桁数を調整するのが一般的です。
print(round(x, 2)) # 出力:0.3
文字列(str)の特徴と扱い方
見た目は同じ「3」でも、 3は数値、 "3"は文字列です。Pythonではこの違いによって、できること・できないことが大きく変わってきます。
このセクションでは、文字列( str型)が持つ特徴や、他の型との違い、そして実際に何ができるのかを確認していきます。
文字列の定義と基本構文
文字列は、 ""や ''で囲んだデータです。たとえば "Hello"や '123'などが文字列にあたります。
text1 = "Hello"
text2 = '123'
print(type(text1)) # <class 'str'>
どちらのクォーテーション(シングル/ダブル)を使っても結果は同じです。Pythonでは str型として扱われます。
数値との違いとエラーの発生例
文字列と数値は、たとえ見た目が同じでも中身が違うため、混ぜて使おうとするとエラーになります。
print("3" + 3)
このコードは実行時に以下のエラーになります。
TypeError: can only concatenate str (not "int") to str
これは、「文字列と整数をそのまま足すことはできない」というPythonからのメッセージです。
このように、**文字列は見た目より中身(型)で判断される**という意識を持つことが重要です。
文字列の操作でよく使う基本機能
文字列では、次のような処理が基本としてよく使われます。
- len():文字数を数える
- +:文字列同士の連結
- *:同じ文字列の繰り返し
name = "Taro"
print(len(name)) # 4
print(name + "Yamada") # TaroYamada
print(name * 3) # TaroTaroTaro
このように、文字列には「数値とはまったく異なる操作」が用意されています。文字列を正しく扱うには、 str型としての性質を理解しておくことが不可欠です。
型変換(キャスト)の注意点
Pythonでは、変数の値を別のデータ型に変換することを「キャスト(型変換)」と呼びます。とくに文字列・数値・真偽値などを相互に変換する場面は多く、正しく理解しておく必要があります。
ただし、Pythonのキャストにはできる変換とできない変換があり、油断するとエラーが発生する原因になります。このセクションでは、よくある変換例と落とし穴を紹介します。
明示的な型変換の基本
Pythonでは、次のような関数を使って明示的に型を変換することができます。
関数 | 変換内容 | 例 | 結果 |
---|---|---|---|
int() | 数値や文字列を整数に変換 | int("10") | 10 |
float() | 整数や文字列を小数に変換 | float("3.14") | 3.14 |
str() | 任意の値を文字列に変換 | str(100) | "100" |
bool() | 値を真偽値に変換 | bool(0) | False |
なぜキャストが必要になるのか?
たとえば、ユーザーから入力された値は input()を使って受け取る場合、すべて文字列( str)になります。
age = input("年齢を入力してください:")
print(age + 10) # これはエラーになる
この例では
ageが
str型のため、数値と足し算しようとしてエラーになります。
「ユーザーから受け取ったデータを正しく処理するために、キャストが必要になる」というのが現実的な理由です。
他にも、ファイルや外部データを扱う場面では、ほとんどの情報が文字列として入ってきます。これらを intや floatに変換することで、計算や比較ができるようになります。
自動変換(暗黙のキャスト)との違い
Pythonでは、演算時に自動で型が変換される「暗黙の型変換(型の昇格)」もあります。たとえば、整数と小数を足すと自動的に float型になります。
a = 5
b = 2.5
c = a + b
print(type(c)) # 出力:<class 'float'>
このような暗黙の変換と、 int()や str()などによる明示的な変換は、目的や使い所が異なるため混同しないようにしましょう。
型変換で起こるエラーに注意
すべての値が変換できるわけではありません。無効な文字列を整数に変換しようとすると、ValueErrorが発生します。
x = "abc"
num = int(x)
出力結果
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: 'abc'
このような場合は、事前に文字列が数値であることを確認する処理(例: isdigit())を入れることが安全です。
たとえば、文字列が数値かどうかを判定してから int()で変換することで、エラーを防ぐことができます。
x = "123"
if x.isdigit():
num = int(x)
print("変換成功:", num)
else:
print("数値ではありません")
現場でよく使われるPythonの文字列判定メソッド【実用ベース厳選】
Pythonには、文字列の中身がどのような構成になっているかを判定するためのメソッドが多数用意されています。その中でも、実務や現場で実際によく使われる代表的なメソッドを下記にまとめました。
メソッド | 判定内容 | 具体的な用途例 |
---|---|---|
isdigit() | 文字列が数字(0~9)のみで構成されているか | 電話番号や社員番号などのバリデーション |
isalnum() | 英数字のみで構成されているか | ログインIDやパスワードの文字種制限 |
isalpha() | 英字のみで構成されているか | 名前などに数字や記号が含まれていないか確認 |
islower() | すべて小文字で構成されているか | 英文メールのフォーマットチェックなど |
isupper() | すべて大文字で構成されているか | 定型書式(コード、分類記号など)の判定 |
isspace() | 空白(スペース・タブなど)だけで構成されているか | 未入力や空入力のバリデーションチェック |
startswith() | 指定した文字列で始まっているか | URL・パス・ファイル名の命名チェック |
endswith() | 指定した文字列で終わっているか | 拡張子のチェック(例:.csv, .txt) |
in 演算子 | 文字列内に特定の部分文字列を含むか | NGワードフィルター、部分一致検索など |
使わないメソッドも存在する
書籍やチュートリアルでは
istitle()や
isnumeric()なども紹介されますが、実務ではほとんど使われません。
そのため、学習初期は上記のような「現場で本当に使うメソッド」に絞って覚えるのがおすすめです。
type()とisinstance()の活用法
補足:この記事ではすでに type()を使って変数の型を確認する例をいくつか紹介してきましたが、 isinstance()という別の方法はまだ登場していません。
isinstance()は type()と似ていますが、「ある型かどうかを柔軟に判定する」ための関数です。
このあとのセクションでは、 type()との違いや実用的な使いどころを整理していきます。
Pythonでは、変数に格納された値の「データ型」を確認したり、条件分岐に利用したりする場面が多くあります。
そのときによく使われるのが
type()と
isinstance()の2つです。
このセクションでは、それぞれの違いと使いどころ、そして初学者が混乱しやすいポイントについて具体的に解説します。
type()の基本的な使い方
type()関数は、対象の変数や値がどのデータ型に属しているかを確認するために使用します。
x = 123
print(type(x)) # 出力:<class 'int'>
このように、
type()はその変数の「正確な型オブジェクト」を返します。
型名を条件として厳密に比較したいときに使われます。
isinstance()の基本的な使い方
isinstance()関数は、ある変数が指定した型(またはそのサブクラス)かどうかを真偽値で判定します。
x = 123
print(isinstance(x, int)) # True
出力結果
True
特徴として、 type()とは異なり、「その型の派生クラス(サブクラス)」も含めて判定できるのが isinstance()です。
type()とisinstance()の違いを理解する
両者は似ているようで用途が異なります。以下に違いを整理します。
関数 | 用途 | 特徴 |
---|---|---|
type() | 正確な型を取得・比較 | 型が完全一致した場合のみTrue |
isinstance() | 特定の型またはそのサブクラスかを判定 | 派生型を含めてTrueになる |
実例:isinstance()のサブクラス対応
以下のように、 bool型は intのサブクラスであるため、 isinstance()で intとして判定されます。
x = True
print(type(x) == int) # False
print(isinstance(x, int)) # True
このように、
isinstance()は「拡張性」を考慮した型判定に向いており、関数の引数チェックやバリデーションなどで多用されます。
補足: type()と isinstance()の違いは、言い換えれば「尋ね方の違い」です。
type()は「あなたは営業部の人ですか?」とピンポイントで尋ねる関数です。
これに対して
isinstance()は「あなたは営業部、または営業に関係する部門の人ですか?」というように、関連も含めて尋ねる関数です。
つまり、尋ね方が違えば、返ってくる答えの“内容”も変わるということです。
関数 | 尋ね方 | 回答イメージ |
---|---|---|
type() | あなたは営業部の人ですか? | いいえ、営業部開発課です。 |
isinstance() | あなたは営業部または関連部門の人ですか? | はい、営業部開発課に所属しています。 |
このあと出てくるコード構造の意味
これから出てくるサンプルコードでは、「社員 → 営業部 → 営業部開発課」という関係をクラスで表現しています。
- Employee:全社員(親クラス)
- Sales:営業部(Employeeの子クラス)
- SalesDev:営業部開発課(Salesの子クラス)
つまり、
SalesDevは
Salesの“子ども”であり、
Employeeの“孫”のような関係です。
この関係性があるからこそ、
isinstance()では「所属してるかどうか」が判定できるのです。
実際の出力結果の違い(サンプルコード)
class Employee:
pass
class Sales(Employee):
pass
class SalesDev(Sales):
pass
person = SalesDev()
print(type(person) == Sales) # False
print(isinstance(person, Sales)) # True
このように、 type()は型が完全に一致する場合しか Trueを返しませんが、 isinstance()はその型の子クラスも含めて判定します。
出力結果
False
True
まとめ
この記事では、Pythonにおける代表的なデータ型と、それらを正しく扱うための基本知識について解説しました。
Pythonは動的型付けの言語であり、変数を宣言する際に型を指定する必要がないという特徴があります。その一方で、扱うデータの中身を正確に理解しておかないと、思わぬバグや変換エラーにつながるリスクもあります。
数値型( int, float)、文字列型( str)の違いや、 type()と isinstance()による型チェック、さらに int()や str()を使った型変換(キャスト)の注意点など、実務で遭遇しやすいポイントを整理してきました。
Pythonでは型の扱いが「柔軟」であることがメリットである一方、「意識的に型を把握・制御しないとバグの温床にもなる」ことを忘れてはいけません。
今後、コードを書く際は「今扱っているデータの型は何か?」を常に意識する習慣を持つことが、エラーの少ない安定したプログラムにつながります。
この記事を読んだら、次は「【Pythonの基礎知識】条件分岐の完全理解(if, elif, else)」の使い方に進むのがおすすめです。