・Pythonの型ヒントと聞いて、説明できない人
・Python勉強中の方
など
私はプログラミング初学者…特に理系の大学生にとってオススメなプログラミングとして、いつもPythonをおすすめしていおりました。
グラフの描画であったり、化学計算用のライブラリが充実であったり色々あるのですが
Pythonは動的型付け言語であり、変数の型は実行時に自動的に判断される簡単さもありました。
つまり、変数を宣言する際に明示的に型を指定する必要はありません。
(この変数は整数で、この変数は文字列だよ〜など)
そのPythonなのですが、Python3.5から型アノテーション(型ヒント)を付与することができるようになりました。
3.5なんて結構前からあるから、もしかしたら「型アノテーションなんて当たり前だよ。」という方も多いと思いますが「なにそれ?」という方もいるとおもいます。(私がそうでした)
この記事ではPythonの型アノテーションについて解説したいと思います。
型アノテーションが使われている例
Python 3.5以降では、関数の引数や戻り値に対して型ヒントを指定することができます。型ヒントは、関数が期待する引数や戻り値の型を示すアノテーションです。
基本的な使い方
小難しく色々書きましたが、実際は簡単に実装できます。
以下のコードは、関数での実装例になります。
#税抜価格から消費税込みの価格を計算する関数
def calc_price(price: int, tax: float) -> int:
return int(price*tax)
#計算例
def main():
price:int = 100
tax: float = 1.1
print(f"この商品の税込み価格は{calc_price(price, tax)}円")
if __name__ == "__main__":
main()
#出力結果:この商品の税込み価格は110円
上記の例では税抜価格から消費税込みの価格を計算するという関数を型アノテーションを使って宣言しています。
関数を定義するときに、税抜商品価格と引数を「:」を使って整数(int)、消費税がかかかると価格が1.1倍になるので浮動小数点数(float)で付与してます。返り値は「->」を使って税抜価格を整数と付与してます。
ただしこの型アノテーション、以下のように誤ったアノテーションを記入しても実行できてしまいます。
def calc_price(price: int, tax: float) -> int:
return int(price*tax)
def main():
price:int = 100.5
tax: float = 1.1
print(f"この商品の価格は{calc_price(price, tax)}円")
if __name__ == "__main__":
main()
#出力結果:この商品の税込み価格は110円
このコードは「price:int = 100.5」とpriceという変数に整数のアノテーションにも関わらず小数を代入してますが、問題なく実行されてしまいます。
なので、テストのような使い方は出来ない点を注意しましょう。
また、リストや辞書型でも型アノテーションを宣言できます。
from typing import List, Dict
sample_list: List[int] = [1, 2, 3, 4]
sample_dict: Dict[str, str] ={"fruit": "apple"}
typing
モジュールは、Python3.5以降に追加されたモジュールで、型ヒントをサポートするために使用されます。
List, Dict以外にも色々あるので
もっともっと勉強したい方は公式ページでチェックを。
fastAPIでの型ヒントの利用
fastAPI
は、PythonのWebアプリケーションフレームワークであり、シンプルなAPIの構築をサポートしています。
私もFastAPIを勉強してこの型ヒントについて知ることができました。
例えばAPIのリクエストやレスポンスに対して、型アノテーションをサポートしています。
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class Item(BaseModel):
name: str
price: floatd
@app.post("/items/")
async def create_item(item: Item):
return item
型アノテーションの利点
型アノテーションをすることで、関数の引数や戻り値の型が明示的になるため、コードの可読性が向上します。
これによって
・バグの早期発見
・開発スピードの向上
・検査ツールによるエラーチェックや自動補完などの恩恵
など色々と良いことがあるそうです。
私もこれを知ってから積極的に記述してます。
おわりに
どうもこんにちは。
コンです。
最近は工場でもPythonを扱う人が増えてきて、楽しく感じております。
後輩?というか職場でも勉強している人が少しずつ増えており、私も頑張らねばという気持ち。
そんな彼ら彼女らのためにもコードの可読性を上げないといけないな、と最近は思って絶賛勉強中でございます。
最近はブログを更新できていなかったのですが…
WBCがとても面白く、夜になっても試合を観直していたりしていたので全然書けませんでした。
今回のWBCで特に印象深かったのがチェコ代表。
次のWBCでも試合したいですね。
勉強もあまり手がつきませんでしたが後悔ゼロの大満足な3月でした笑
また来月から頑張ります。