【コード付き】Pythonのデータ型を確認する方法を丁寧に解説

※本サイトにはプロモーション・広告が含まれています。

(最終更新月:2023年6月)

✔このような方へ向けて書かれた記事となります

「Pythonで変数の型をどのように確認できるのか知りたい」

「Pythonでの型の取得方法や確認方法を学びたい」

「実際のPythonコードを使って型の確認方法を見てみたい」

✔当記事を通じてお伝えすること

  • Pythonにおける型の基本概念
  • Pythonでの型の取得や確認方法
  • 型確認に関するPythonコードの実例

当記事では、Pythonでの型の基本知識から、具体的な型の取得や確認方法、そして実際に動作するコード例まで、わかりやすく解説しています。

ぜひ最後までお読みください。

筆者プロフィール

筆者プロフィールアイコン

【現職】プロダクトマネージャー

【副業】ブログ(月間20万PV)/YouTube/Web・アプリ制作

「プログラミング × ライティング × 営業」の経験を活かし、30後半からのIT系職へシフト。現在はプロダクトマネージャーとして、さまざまな関係者の間に入り奮闘してます。当サイトでは、実際に手を動かせるWebアプリの開発を通じて、プログラミングはもちろん、IT職に必要な情報を提供していきます。

【当ブログで紹介しているサイト】

当サイトチュートリアルで作成したデモ版日報アプリ

Django × Reactで開発したツール系Webアプリ

✔人に見せても恥ずかしくないコードを書こう

「リーダブルコード」は、わかりやすく良いコードの定義を教えてくれる本です。

  • 見るからにきれいなコードの書き方
  • コードの分割方法
  • 変数や関数の命名規則

エンジニアのスタンダートとすべき基準を一から解説しています。

何回も読むのに値する本なので、ぜひ手にとって読んでみてください。

Pythonの型を理解するための前提知識

まずはPythonの型を理解するための前提知識を見ていきましょう。

Pythonにおける型は、プログラムの正確性を保証し、エラーを未然に防ぐために重要な役割を果たすものです。

  • Pythonの型(データ型)とは?
  • 型チェックの重要性

Pythonの型(データ型)とは?

Pythonの型とは、変数やオブジェクトが持つデータの種類や性質を定義するための仕組み。

言語では変数を宣言する際に型を指定するものもありますが、Pythonでは実行時に自動的に決定(動的型付け言語)されます。

以下は、Pythonの主要な型を表にまとめたものです。

型名説明
数値型 (Numeric Types)整数 (int)、浮動小数点数 (float)、複素数 (complex) などの数値
文字列型 (String Type)文字のシーケンスを表現する型
ブール型 (Boolean Type)真 (True) または偽 (False) の値を表現する型
リスト (List)複数の要素を順序付けて格納するデータ構造
タプル (Tuple)要素の値を変更できない不変のデータ構造
辞書 (Dictionary)キーと値のペアを格納するデータ構造
セット (Set)重複のない要素の集合を表現する型
None型 (None Type)値が存在しないことを表す特別な型

これらの型を使ってデータを操作することで、様々なプログラムの要件に応じたデータ構造や値の表現が可能となります。

Pythonの変数について詳しくは以下をご覧ください。

【Python】変数の定義方法から役割、注意点までコード付きで解説
Pythonで「変数」を使用する方法について知りたいですか?変数はデータを一意に識別し、Pythonプログラム内で操作するための基本的なツールです。当記事では、Pythonの変数使用法を具体的なコード付きで丁寧に解説しています。特にPython初心者の方には必見の内容です。

型チェックの重要性

Pythonで型チェックが必要な理由は、Pythonが「強い型付け」の言語で、異なる型同士の演算が許されないからです。

Pythonでは型が自動的に決定されますが、それは同時に型の間違いによるエラーを引き起こす可能性もあります。

たとえば数値を期待している場所に、文字列が来てしまった場合などです。

num1 = 10
num2 = "20"  # 数値型ではなく文字列型

# エラー: 数値型と文字列型の演算は許されない
result = num1 + num2

#以下のようなエラーメッセージがでます。
TypeError: unsupported operand type(s) for +: 'int' and 'str'

このようなエラーを防ぐために、Pythonでは型を確認し、予期しない型の値が来ていないかをチェックすることが推奨されます。

Pythonの型を詳しく解説

Pythonで利用できる基本的な型を詳しくご紹介します。

Pythonには数値型、文字列型、リスト型などさまざまな型があり、それぞれが異なる目的や用途で使用されます。

  • 数値型 (int, float)
  • 文字列型 (str)
  • リスト型 (list)
  • タプル型 (tuple)
  • 辞書型 (dict)
  • 集合型 (set)
  • ブール型 (bool)

数値型 (int, float)

Pythonでは、整数を扱うための「int」型と、浮動小数点数を扱うための「float」型があります。

これらの型は、数値計算をおこなう際に利用するものです。

例えば整数値は、「int」型で表され、小数値は「float」型で表されます。

# 整数の例
num1 = 10
print(type(num1))  
# <class 'int'>

# 浮動小数点数の例
num2 = 3.14
print(type(num2))  
# <class 'float'>

int型についてはこちら。

【Python】整数(int)型の基本|サンプルコード付き
Pythonの整数について知りたいですか?当記事では、Python整数型の基本的な使い方や実践例を詳細に解説しています。int関数の使い方はもちろん、その注意点なども具体的なコード付きで解説しています。初心者の方は必見です。

float型についてはこちらの記事をご覧ください。

【必読】Pythonのfloat型をマスター|サンプルコード付き
Pythonの浮動小数点数(float)型について詳しく知りたいですか?当記事では、float型の基本はもちろん、他データ型の基本にも触れ、それぞれ具体的なコードまで紹介しています。初心者の方は必見です。

文字列型 (str)

「str」型は文字列を扱うための型です。

文字列はシングルクォート(”)またはダブルクォート(“”)で囲むことで定義します。

また、文字列は連結、スライス、置換など様々な操作をサポートしています。

# 文字列の例
text1 = 'Hello, World!'
print(type(text1))  # <class 'str'>

text2 = "This is a string."
print(type(text2))  # <class 'str'>

# 文字列の連結
concatenated = text1 + ' ' + text2
print(concatenated)  # Hello, World! This is a string.

# 文字列のスライス
slice = text1[7:12]
print(slice)  # World

# 文字列の置換
replaced = text2.replace('is', 'was')
print(replaced)  # Thwas was a string.

文字列操作について、詳しい記事はこちらです。

【完全版】Pythonのstr(文字列)操作|コード付きで徹底解説
Pythonのstr(文字列)について詳しく知りたいですか?当記事では、初心者の方向けにstrメソッドを含め、文字列の操作方法をさまざまなカテゴリ別に解説しています。すべて実際のコード付きの解説なので、初めての方でも手を動かしながら学べます。初心者の方は必見です。

リスト型 (list)

「list」型は複数の値を順序付けて保存するための型です。

リストはブラケット([])を用いて定義します。

添字による要素のアクセスやスライス、要素の追加や削除など、多彩な操作をサポートしています。

# リストの例
fruits = ['apple', 'banana', 'cherry']
print(type(fruits))  # <class 'list'>

# リストの要素へのアクセス
print(fruits[0])  
# apple

print(fruits[1])  
# banana

# リストのスライス
print(fruits[1:])  
# ['banana', 'cherry']

# リストの要素の追加
fruits.append('durian')
print(fruits)  
# ['apple', 'banana', 'cherry', 'durian']

# リストの要素の削除
del fruits[1]
print(fruits)  
# ['apple', 'cherry']

タプル型 (tuple)

「tuple」型はリストと同じく複数の値を順序付けて保存する型ですが、一度定義された要素は変更することができません。

これは「イミュータブル(変更不可)」な特性を持つためです。

タプルは、要素の値が変わらないことを保証する必要がある場合などに利用されます。

# タプルの例
person = ('John', 25, 'Male')
print(type(person))  # <class 'tuple'>

# タプルの要素へのアクセス
print(person[0])  # John
print(person[1])  # 25

# タプルの要素は変更不可
person[0] = 'Jane'  # エラーが発生する

# タプルの要素の取得とアンパック
name, age, gender = person
print(name)  # John
print(age)   # 25
print(gender)  # Male

タプルについてはこちらで詳しく解説しています。

【保存版】Pythonのタプルを基本から実例付きで丁寧に解説
Pythonのタプルについて知りたいですか?タプルは不変のデータ型として、Pythonで重要なツールのひとつです。当記事では、Python タプルの扱い方を具体的なコード付きで丁寧に解説します。特に初心者の方におすすめの内容となっています。

辞書型 (dict)

「dict」型はキーと値のペアを保存する型で、キーを元に値を高速に検索することができます。

この型は、一対一の対応関係を表すときや、検索を高速化するときに便利です。

# ディクショナリの例
student_scores = {
    'John': 80,
    'Emily': 90,
    'Tom': 75
}

print(type(student_scores))  
# <class 'dict'>

# キーを使用して値を取得
print(student_scores['John'])  
# 80

# キーに対応する値を変更
student_scores['Tom'] = 85
print(student_scores)  
# {'John': 80, 'Emily': 90, 'Tom': 85}

# キーの存在確認
print('Emily' in student_scores)  
# True

print('Sarah' in student_scores)  
# False

# キーと値のペアを追加
student_scores['Sarah'] = 95
print(student_scores)  
# {'John': 80, 'Emily': 90, 'Tom': 85, 'Sarah': 95}

# キーと値のペアを削除
del student_scores['John']
print(student_scores)  
# {'Emily': 90, 'Tom': 85, 'Sarah': 95}

集合型 (set)

「set」型は重複する要素を持たない集合を扱う型です。

この型は、重複要素の削除や集合演算(和集合、積集合、差集合など)などを行うときに利用されます。

# セットの例
fruits = {'apple', 'banana', 'cherry', 'apple'}
print(type(fruits))  
# <class 'set'>

print(fruits)  
# {'apple', 'banana', 'cherry'} (重複する要素が削除されています)

# セットの要素数を取得
print(len(fruits))  
# 3

# セットに要素を追加
fruits.add('orange')
print(fruits)  
# {'apple', 'banana', 'cherry', 'orange'}

# セットから要素を削除
fruits.remove('banana')
print(fruits)  
# {'apple', 'cherry', 'orange'}

# セットの和集合、積集合、差集合を計算
fruits1 = {'apple', 'banana', 'cherry'}
fruits2 = {'banana', 'orange'}

print(fruits1 | fruits2)  
# {'apple', 'banana', 'cherry', 'orange'} (和集合)

print(fruits1 & fruits2)  
# {'banana'} (積集合)

print(fruits1 - fruits2)  
# {'apple', 'cherry'} (差集合)
【Python】Setとは?基本から書き方までコード付きで解説
PythonのSetについて、詳しく知りたいですか?当記事では、PythonのSetに関する基本的な使い方や実践的な例を詳細に解説しています。Setに用意されているさまざまなメソッド(関数)を実際のコード付きで解説しているので、初心者の方でもわかりやすいです。ぜひご覧ください。

ブール型 (bool)

「bool」型は真偽値を表す型で、真を表す「True」と偽を表す「False」の2つの値しか取りません。

ブール型は、条件分岐やループの制御などで頻繁に利用されます。

# ブール値の例
is_raining = True
is_sunny = False

print(type(is_raining))  # <class 'bool'>
print(is_raining)  
# True

print(is_sunny)  
# False

# 条件分岐での使用例
if is_raining:
    print("It's raining!")

if not is_sunny:
    print("It's not sunny!")

# ブール演算
x = 10
y = 5
z = 3

is_greater = x > y  
# True

is_equal = y == z  
# False

print(is_greater)
print(is_equal)

Pythonで型を確認する方法

ここでは、Pythonで変数の型を確認する基本的な方法を学んでいきます。

また、その活用例も交えて説明します。

  • type()関数による型の取得・確認
  • isinstance()関数による型の判定

type()関数による型の取得・確認

Pythonのtype()関数は、引数として与えられたオブジェクトの型を返す組み込み関数です。

type()関数では、ひとつの引数を受け取り、その引数の型を表すタイプオブジェクトを返します

使い方は非常にシンプルで、type(オブジェクト)のように書きます。

result = type(123)
print(result)  # <class 'int'>

type()関数の概要

type()関数は、オブジェクトの型を調べるための基本的な方法です。

Pythonのオブジェクトはすべて何らかの型を持っているため、この関数を使って型を調べられます。

type()関数の使い方

type()関数の使い方を見てみましょう。

以下にいくつかの例を示します。

print(type(123))  
# <class 'int'>

print(type(3.14))  
# <class 'float'>

print(type('hello'))  
# <class 'str'>

print(type([1, 2, 3]))  
# <class 'list'>

print(type((1, 2, 3)))  
# <class 'tuple'>

print(type({'apple': 100, 'banana': 200}))  
# <class 'dict'>

isinstance()関数による型の判定

Pythonのisinstance()関数は、指定されたオブジェクトが特定の型であるかどうかを判定するための組み込み関数です。

isinstance()関数は2つの引数を受け取り、第1引数のオブジェクトが第2引数の型である場合にTrueを、そうでない場合にFalseを返します。

x = 5

if isinstance(x, int):
    print("x is an integer")
else:
    print("x is not an integer")

y = "Hello"

if isinstance(y, str):
    print("y is a string")
else:
    print("y is not a string")

isinstance()関数の概要

isinstance()関数は、特定の型のオブジェクトであるかどうかをチェックする際に使用します。

特定の操作をおこなう前に、オブジェクトが適切な型であることを確認するのに便利です。

isinstance()関数の使い方

isinstance()関数の使い方を見てみましょう。以下にいくつかの例を示します。

print(isinstance(123, int))  # True
print(isinstance(3.14, float))  # True
print(isinstance('hello', str))  # True
print(isinstance([1, 2, 3], list))  # True
print(isinstance((1, 2, 3), tuple))  # True
print(isinstance({'apple': 100, 'banana': 200}, dict))  # True

isinstance()関数は、オブジェクトが特定の型かどうかを判定するため、特にオブジェクトが特定のメソッドや属性を持っていることを確認する前に、そのオブジェクトの型を確認するのに便利です。

サブクラスも考慮するため、クラスの継承関係を持つオブジェクトの型をチェックする場合にも役立ちます。

type()関数とisinstance()関数の違い

ここでは、type()関数とisinstance()関数の違いについて詳しく見ていきます。

また、それぞれどのような場合に使うべきかについても解説します。

  • 違いの概要
  • どちらを使うべきか

違いの概要

type()関数とisinstance()関数は、Pythonでオブジェクトの型を調べるための関数ですが、いくつかの重要な違いがあります。

  • type()関数:引数として与えられたオブジェクトの正確な型を返す
  • isinstance()関数:引数として与えられたオブジェクトが指定された型、またはそのサブクラスのインスタンスであるかどうかを返す

Pythonがオブジェクト指向プログラミングをサポートしているため、オブジェクトが特定のクラスのサブクラスのインスタンスである可能性があるためです。

たとえば、以下のコードを見てみましょう。

class Fruit:
    pass

class Apple(Fruit):
    pass

a = Apple()
print(type(a) is Fruit)  
# False

print(isinstance(a, Fruit))  
# True

ここでtype(a) is FruitFalseを返しますが、isinstance(a, Fruit)Trueを返します。

これは、aAppleクラスのインスタンスであり、AppleクラスはFruitクラスを継承しているためです。

このような継承関係を考慮する必要がある場合には、isinstance()関数を使用するのが適しています

どちらを使うべきか

type()関数とisinstance()関数のどちらを使うべきかは、具体的な状況によります。

type関数を使う場合

  • オブジェクトが厳密に特定の型であるかを知りたい
  • オブジェクトが特定の型のメソッドや属性を持っているかどうかを確認するための型確認

isinstance関数を使う場合

  • オブジェクトが特定の型またはそのサブクラスのインスタンスであるかを判定したい場合
  • クラスの継承関係を考慮する必要がある場合

Pythonの型ヒント とその利点

ここでは、Pythonの型ヒントについて説明します。

型ヒントを使用する利点についても見ていきましょう。

  • 型ヒントとは何か?
  • 型ヒントの利点

型ヒントとは何か?

Pythonの型ヒントは、関数やメソッドの引数や戻り値の型を示すための機能。

Python 3.5以降で導入され、コードの可読性と保守性を向上させるために使用されます。

型ヒントはコード内にオプショナルなメタデータを提供し、そのコードが期待するデータ型を示します。

これにより、開発者やツールがコードの意図をより理解しやすくなります。

型ヒントは以下のように記述します。

def greeting(name: str) -> str:
    return 'Hello ' + name

この例では、関数greetingが文字列型のnameを引数に取り、文字列を返すことを示しています。

型ヒントの利点

型ヒントを使用すると、いくつかの重要な利点があります。

  1. 可読性: 型ヒントは、関数やメソッドがどのような引数を期待し、何を返すかを明示的に示すことで、コードの可読性を向上させます。
  2. エラーチェック: 型ヒントを使用すると、開発中に型に関連するエラーを早期に検出することが可能になります。これは、静的型チェッカー(例えばmypy)を用いてコードを解析し、型ヒントに基づいたエラーを報告することで達成できます。
  3. 文書化: 型ヒントは、関数やメソッドの引数と戻り値についての情報を提供することで、一種の内部文書化を実現します。これにより、他の開発者がコードを理解しやすくなります。
  4. IDEとの親和性: 型ヒントを使用すると、IDEやエディタがより正確な自動補完や型チェックを提供できます。これにより、コードの品質を向上させるとともに、開発の生産性を向上させることができます。

型ヒントを利用した品質向上

こちらでは、Pythonでの型ヒントの活用についてお伝えしていきます。

  • 型ヒントとは?
  • 型ヒントの活用方法
  • 関数の引数と返り値の型ヒント
  • mypy型チェックツールの活用

型ヒントとは?

型ヒントは、Pythonのソースコードに変数や関数の期待される型を注釈として追加する機能です。

これにより、コードの可読性が向上し、型に関連するエラーを早期に検出できます。

# 変数の型ヒントの例
name: str = "John"
age: int = 25
is_student: bool = True

# 関数の型ヒントと戻り値の例
def add_numbers(x: int, y: int) -> int:
    result = x + y
    return result

# 型ヒントを持つ関数の呼び出し
sum_result = add_numbers(5, 3)
print(sum_result)  # 結果: 8

# 型ヒントに合わない引数を渡した場合(エラーが発生する)
sum_result = add_numbers("5", 3)  # エラー: TypeError

型ヒントの活用方法

型ヒントは、変数宣言時や関数定義時にコロン(:)の後に型を記述することで追加できます。

def greet(name: str) -> None:

: strで受け取る引数が文字列であること、-> Noneで返す値がNoneであることがわかります。

関数の引数と返り値の型ヒント

関数の引数と返り値に型ヒントを付けることで、関数の使い方を明確にし、誤った型のデータが渡されるのを防げます。

def calculate_average(numbers: List[float]) -> float:
    total = sum(numbers)
    average = total / len(numbers)
    return average

# 正しい型の引数を渡して関数を呼び出す
data = [4.5, 6.2, 3.8, 7.1, 5.9]
result = calculate_average(data)
print(result)  # 結果: 5.3

# 型ヒントに合わない引数を渡した場合(エラーが発生する)
invalid_data = [4.5, "6.2", 3.8, 7.1, 5.9]
result = calculate_average(invalid_data)  # エラー: TypeError

mypy型チェックツールの活用

mypyは、Pythonの型ヒントを静的にチェックするツールです。

型ヒントが正しく記述されているかをチェックし、潜在的な問題を指摘してくれます。

これにより、コードの品質を向上させることができます。

以下がチェックしたいコードの例です。

from typing import List

def calculate_average(numbers: List[float]) -> float:
    total = sum(numbers)
    average = total / len(numbers)
    return average

mypyを実行し確認してみましょう。

mypy your_script.py

mypyは指定されたスクリプトの型ヒントをチェックし、潜在的な型関連の問題やエラーを検出します。

もし型に関連する問題がある場合、エラーメッセージや警告メッセージが表示されます。

まとめ

当記事では、Pythonの型システムについて、、以下の内容を学習してきました。

  • その特性
  • 基本的な型
  • 型の確認方法
  • 型ヒント

Pythonの動的型付けは、その柔軟性と手軽さから初学者にとって扱いやすい特性の一つですが、大規模なプロジェクトや複数の開発者が関与する場合、型についての深い理解と適切な管理は必要となります。

当記事が、Pythonの型システムを深く理解し、より効果的に利用するための一助となれば幸いです。

タイトルとURLをコピーしました