ホームページ  >  記事  >  バックエンド開発  >  Python での型チェックの詳細な紹介

Python での型チェックの詳細な紹介

高洛峰
高洛峰オリジナル
2017-02-20 10:21:241560ブラウズ

まえがき

Python が厳密に型指定された動的型チェック言語であることは誰もが知っています。いわゆる動的型とは、変数を定義するときに、Python インタープリターが実行時に変数の型を自動的にチェックする必要がないことを意味します。

静的型付け言語 (C 言語など) と比較して、これは単に型宣言文字の記述が少ないというだけではありません:

#include <stdlib.h>
#include <stdio.h>

#define BUFF 100

char* greeting(char* name){ 
 char* msg = (char *) malloc(sizeof(char) * BUFF);
 sprintf(msg, "Hello, %s!", name);
 return msg;
}

int main(){ 
 printf("Greeting: <%s>\n", greeting("C99"));
 return 0;
}

def greeting(name): 
 return "Hello, {}!".format(name)
def main(): 
 print("Greeting: <%s>" % greeting("Python35"))
if __name__ == &#39;__main__&#39;: 
 main()

動的型付けは私たちの考え方をある程度変えますコンピューター作業のシミュレーションから解放され、解決する必要がある問題にもっと集中できるようになります。上記の例と同様に、挨拶関数がどのような種類のパラメーターを受け入れるか、どのような種類の戻り値を心配する必要がありません。グリーティング機能が実装する必要がある機能のみを考慮する必要があります。

もちろん、これは動的型が必ずしも静的型よりも優れているという意味ではありません。C 言語の Python と比較すると、次のようになります。

package main

import "fmt"

func greeting(name string) string { 
 return fmt.Sprintf("Hello, %s", name)
}
func main() { 
 fmt.Printf("Greeting: <%s>", greeting("Go"))
}

静的型の利点(上記はある程度欠点でもありますが) メソッドを定義する際に必須のプロトコル (インターフェース) が策定され、そのプロトコルに従うことによってのみ正しく使用できることです。これは、複数人での協力、サードパーティ ライブラリの開発、バグの迅速な発見などに非常に役立ちます。静的型付けのもう 1 つの大きな利点は、IDE がインターフェイスの使用と型チェックを促すのに役立ち、効率がさらに向上することです。メリットがたくさんあるので、あなたもPythonを勉強してみませんか?実際、Python 3.5 の PEP 484 と Python 3.6 の PEP 526 はそれぞれ、型ヒント (Type Hints) の構文を追加しました。PEP 484 は、主に関数、メソッド、クラス、および関数のパラメーターと戻り値の型宣言構文に関するものです。 PEP 526 は変数型のステートメントを追加します:

R
def greeting(name: str) -> str: 
 return "Hello, {}!".format(name)
E

MyPy

Mypy は静的型チェックツールの公式推奨です:

python3 -m pip install mypy

は mypy コマンドで Python プログラムを直接チェックできます:

Relreee

使いやすくするために、Atom を例として IDE に適用できます。プラグイン linter-mypy をインストールできます:

mypy greeting.py

Python での型チェックの詳細な紹介

Mypy がサポートしています。以下の表に示す一般的な型 (公式ドキュメントから):

Python での型チェックの詳細な紹介

ここで、List/Dict/Iterable/Sequence/Any は、標準ライブラリの型付けからのものです。ここでの Sequence と Iterable はそれぞれ collections.abc.Sequencecollections.abc.Iterable に対応します。簡単に区別すると、Sequence は数値添字によってインデックスを付けることができ、Iterable はジェネレーターを表すことができます。 Python 3.5 インタープリターを介して直接実行できますが、Python 2.x とは完全に互換性がありません。 Python 2 で使用したい場合は、PHP の中国語 Web サイトに注意してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。