プログラミング
記事内に商品プロモーションを含む場合があります

Pythonの型ヒントを使った型宣言パターン(変数、関数、独自型、numpy…)

Aru

Pythonのプログラムでは型宣言は必須ではありませんが、型ヒントを利用することでコードの可読性と保守性を大幅に向上させることができます。この記事では、Pythonでの型ヒントの書き方を、変数、関数、独自型、numpyなどのライブラリについて紹介します。

Pythonでも型の指定は可能

Pythonでは、変数の型を明示的に定義する必要はありません。そのため、ついつい型を指定せずにコードを書いてしまいがちです。

しかし、Python 3.5からは「型ヒント」という型を宣言する仕組みが導入されています。これを使えば、コードに型を明示的に記述することができます。

型を記述しておけば、他人と共有するプログラムや後で再利用するプログラムの可読性が大幅に向上します。

「コードの可読性向上」を図るために、型指定を意識して行うことが重要です。

この記事では、Pythonで型を指定する方法について詳しく解説します。

Pythonでは型定義ではなく「型ヒント」と呼ぶようです

あくまでもヒントであり、型が間違っていても特にエラーが出るわけではありません

この記事で紹介するのは、Python3.9以降の書き方です。

Pythonの組み込み型

まずは、Pythonの組み込み型について説明します。Pythonでよく使う組み込み型には、以下のものがあります。

Pythonの代表的な型
組み込み型説明
bool真偽値
int整数
float浮動小数点数
listリスト
tupleタプル
str文字列
set集合型
dict辞書型

これらの組み込み型について、型を明示することを考えます。

型の宣言

Pythonでは、以下のプログラムのように型を宣言せずに変数を定義することが可能です。

a = 10
print(a)
# 10

しかし、型宣言を行うことで、コードの可読性や保守性が向上します。以下、Pythonで型宣言を行う方法について解説します。

ちなみに、上記のプログラムは型宣言を行うと以下のようになります。

a : int = 10
print(a)
# 10

変数の型ヒント

変数の型宣言は以下のようになります。

:の後に型名をつけるだけです。

変数の型宣言
<変数名>:<型>

変数の宣言例:

>>> a : int = 10
>>> a
10
>>> d:dict = {'a':10, 'b':20}
>>> d
{'a': 10, 'b': 20}
>>> l:list = [1,2,3,4,5]
>>> l
[1, 2, 3, 4, 5]

関数の型ヒント

関数の引数、戻り値の型については以下のように宣言します

引数は:をつけて型をしていまします。また、戻り値は->に続けて型を宣言します。

関数の型宣言
def <関数名>(<変数名>:<型>...) -> <戻り値の型>

関数の宣言例:

>>> def f(a :int, b :int) -> int :
...   return a+b
... 
>>> f(10,20)
30

型ヒントなので、別の型を入れても動作してしまいます。例えば、上の例で文字列を入れても問題なく動いてしまいます。

型チェックをしたい場合は、VSCodeなどのエディタでプラグインを導入すると良いです。

>>> def f(a :int, b :int) -> int :
...   return a+b
... 
>>> f("test", "1234")
'test1234'

関数(戻り値が複数の場合の型ヒント)

関数の戻り値が複数の場合は、タプル(tuple)を使います。

具体的には、以下のようなコードになります

def f(a:int, b:int) -> tuple[int, int]:
  return a+b, a-b

print(f(10,20))
# (30, -10)

関数(引数、戻り値が任意の型の場合の型ヒント)

変数の型を「任意」にしたい場合にはAnyを使います。

Anytypingライブラリをインポートすることで使うことができます。

from typing import Any

def f(a:Any, b:Any) -> Any:
  return a+b

print(f(10,20))
# (30, -10)
print(f("a","b"))
# ab

独自の型を用いた型ヒント

独自の型を作成し、独自の型を指定することも可能です。

この場合は、typingライブラリのNewTypeを使って以下のようにします。

以下のコードでは、MyIntという型をNewTypeを使って作成し、型指定に利用しています。

from typing import NewType

MyInt = NewType('MyInt', int)

def f(x:MyInt) :
    if x == 0: print("zero")


f(0)
# zero

numpyなどへの型ヒント

numpyなどのライブラリの型も指定することが可能です。

numpyなどの型指定は以下のようにして行います。

>>> import numpy as np
>>> x:np.array = np.array([1,2,3,4])
>>> x
array([1, 2, 3, 4])
>>> type(x)
<class 'numpy.ndarray'>

nptypingというライブラリを使う方法もあります。そちらを使う方法もあります。

まとめ

以上、Pythonで型ヒントをつける方法について解説しました。

型を明示的に指定しなくてよいので、ついつい型を指定せずに記述してしまいますが、特に複数人で共同作業する場合や、再利用するコードを書く場合には型宣言をやっておいた方が可読性があがりますので良いと思います。

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

ABOUT ME
ある/Aru
ある/Aru
IT&機械学習エンジニア/ファイナンシャルプランナー(CFP®)
専門分野は並列処理・画像処理・機械学習・ディープラーニング。プログラミング言語はC, C++, Go, Pythonを中心として色々利用。現在は、Kaggle, 競プロなどをしながら悠々自適に活動中
記事URLをコピーしました