Pythonで型定義/宣言する方法|型ヒントの使い方をわかりやすく解説
Pythonでプログラムを書くと気に型を宣言をしていますか? 楽なのでついつい型の指定を省いてしまいますが、型宣言した方が可読性が向上します。この記事では、Pythonで型宣言(型ヒント)する方法を解説します。
Pythonでも型の指定は可能
Pythonでは変数の型を定義しなくてもいいので、ついつい型を明示せずに記述してしまいます。
ただ、Python3.5からは型ヒントという型を宣言する仕組みが備わっています。これを利用することで、型を明示することが可能です。
他人と共有するプログラムや、後で再利用するプログラムの場合は、型ヒントを埋め込んでおくことで可読性が高くなります。
「コードの可読性向上」を向上するために型指定を心掛けましょう。
この記事では、Pythonで型を指定する方法を解説します
Pythonでは型定義ではなく「型ヒント」と呼ぶようです
あくまでもヒントであり、型が間違っていても特にエラーが出るわけではありません
この記事で紹介するのは、Python3.9以降の書き方です。
Pythonの組み込み型
まずは、Pythonの組み込み型について説明します。Pythonでよく使う組み込み型には、以下のものがあります。
組み込み型 | 説明 |
---|---|
bool | 真偽値 |
int | 整数 |
float | 浮動小数点数 |
list | リスト |
tuple | タプル |
str | 文字列 |
set | 集合型 |
dict | 辞書型 |
これらの組み込み型について、型を明示することを考えます。
型の宣言
Pythonでは型を宣言せずに変数を定義することが可能です。
a = 10
print(a)
# 10
とはいえ、型宣言した方が良いこともあります。ここでは、Pythonで型宣言する方法について解説します
変数
変数の型宣言は以下のようになります。
:
の後に型名をつけるだけです。
<変数名>:<型>
変数の宣言例:
>>> 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
を使います。
Any
はtyping
ライブラリをインポートすることで使うことができます。
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で型ヒントをつける方法について解説しました。
型を明示的に指定しなくてよいので、ついつい型を指定せずに記述してしまいますが、特に複数人で共同作業する場合や、再利用するコードを書く場合には型宣言をやっておいた方が可読性があがりますので良いと思います。