ホームページ  >  記事  >  バックエンド開発  >  複数の Python 型チェック ツールの共有

複数の Python 型チェック ツールの共有

不言
不言転載
2019-03-27 09:52:231886ブラウズ

この記事では、いくつかの Python 型チェック ツールの共有を紹介します。これには一定の参考価値があります。必要な友人は参照できます。お役に立てば幸いです。

最近、Microsoft は Python 静的型チェック ツールを Github でオープンソース化しました: pyright これはコミュニティで大きな注目を集めています。

Microsoft のオープン ソース プロジェクトへの参加はますます大きくなっています。Github を買収するという大きな戦略的野心は言うまでもなく、そのオープン ソース VS Code エディタはすでに猿の世界の無数のファンを魅了しています。Kenneth Reitz さえも、私たちの Python サークルの有名人 (リクエスト、リクエスト-HTML、レスポンダーなどを含む複数のオープンソース プロジェクトの作成者) は、この機能を絶賛しています。

現在オープンソースとなっている Pyright は評判が良いので、その機能を見て、ついでに他のいくつかの型チェック ツールを紹介しましょう。

ご存知のとおり、Python は動的に型指定される言語であり、変数の実際の型は実行時までわかりません。これが動的言語の特徴ですが、チームワークや大規模なプロジェクトでは、「 動的言語は一時的には面白いが、再構築は火葬場」という諺があるように、メンテナンスコストは避けられません。 。

2006 年の PEP-3107 の時点で、Python には関数アノテーション機能が導入され、最終的にバージョン 3.0 で実装されました。バージョン 3.5 では、Python は引き続き静的型チェック構文 (つまり、PEP-484、型ヒント) を導入しました。 2014 年の PEP-483 では、「タイプ ヒントの理論」というタイトルで理論的な概要も作成されました。その後、PEP-526、PEP-544が次々に提案され、型チェックの仕様は徐々に充実してきました。

型チェックの利点は、早期にチェックして型エラーを事前に検出し、コードの一貫性と保守性を向上させることです。 (抜け毛予防にもなるにゃ)

# 不加检查
def greeting(name):
    return 'Hello ' + name

# 添加检查
def greeting(name: str) -> str:
    return 'Hello ' + name

上記の例のように、チェックを追加すると、入力パラメータと戻り値が文字列型であるかどうかをコンパイル時に判断できます。

Microsoft が pyright を開始する前は、公式の mypy、Google の pytype、Facebook の pyre-check という 3 つの主流の静的チェック ツールがありました。二人三脚の状況が崩れようとしている。

複数の Python 型チェック ツールの共有

#pyright のドキュメントには、次の特徴があると記載されています:

  • 高速。 mypy や Python で書かれた他のチェック ツールと比較すると、5 倍以上高速です。
  • Python環境に依存しません。これは TypeScript で書かれており、ノード上で実行され、Python 環境やサードパーティのパッケージに依存しません。
  • 高度な構成が可能。無料の構成をサポートし、さまざまな実行環境 (PYTHONPATH 設定、Python バージョン、プラットフォーム ターゲット) の指定をサポートします。
  • チェック項目が完了しました。型チェックと他の構文項目 (PEP-484、PEP-526、PEP-544 など) のチェックに加え、関数の戻り値、クラス変数、グローバル変数、さらには条件付きループ ステートメントのチェックもサポート
  • コマンドラインツール。これには、コマンド ライン ツールと言語サーバー プロトコル
  • 組み込みスタブという 2 つの VS Code プラグインが含まれています。 Typeshed のコピーが使用されます。 (注: 組み込みモジュール、標準ライブラリ、サードパーティ コンポーネントを確認するには、静的 pyi ファイルを使用してください)
  • 言語サービス機能。ホバープロンプト情報、シンボル定義ジャンプ、およびリアルタイム編集フィードバック

この点では、強力ではありません。実際、著作権は「巨人の肩の上に立っており」、その機能は他のいくつかの先人から受け継がれているようです。

「Python の父」Guido van Rossum が個人的に開発した公式の mypy を見てみましょう。これが最も主流の選択肢です。早期にリリースされ、大規模なユーザー ベースがあり、最も豊富なドキュメントとコミュニティの経験。

統合 IDE に関しては、すべての主流エディタがサポートしています: PyCharm、Vim、Emacs、Sublime Text、VS Code、Atom... 業界経験の観点から言えば、Instagram と Dropbox のプロジェクトは py2 から始まりました py3 への移行は保証として使用するためです。

次に、Google の pytype を見てみましょう。ドキュメントによると、次のことが可能です:

  • スペル エラーや関数呼び出しエラーなどの一般的なエラーをマークする
  • カスタム タイプを強化するアノテーション
  • Supports generated type annotations for pyi files

ドキュメントを見ると、「エラーノイズリダクション」という非常に使いやすい機能があることがわかりました。 " 、変更する必要のないエラーについては、コメントを追加して型チェックを省略できます。

さらに、別の良い考慮事項があります。型チェックを記述するために、他のモジュールがモジュールに導入される可能性があります。後者の場合、pytype にはそれを非表示にし、型チェックを行うときにのみロードする方法があります。 。

最後に、Facebook の pyre-check を紹介したいと思います。これは、昨年オープンソース化され、多くの賞賛を受けました (おそらく、Microsoft が著作権プロジェクトを開始したのは、それがあったからでしょう)。

基本的な機能は似ていますが、ハイライトもあります。 pyre-check は Watchman モジュールを統合でき、この「ウォッチャー」はコード ファイルを監視し、加えられた変更を追跡します。 Microsoft の pright には監視モードがあり、これを吸収して使いやすくしたはずです (Watchman やその他の依存関係を追加でインストールする必要がないため)。

Pyre-check にもハイライトがあり、特定の行の式の型をクエリしたり、クラスのすべてのメソッドをクエリして結果を返したりするなど、ソース コードに対してローカルおよび地域のチェックを実行できるクエリ パラメータがあります。これにより、包括的な検査が不要になります。

4 つの型チェック ツールを紹介した後、概要を比較します。

複数の Python 型チェック ツールの共有

それらのパフォーマンスについては、本当に Pyright の言うとおりですか。他のものの5倍のスピード?興味のある学生はぜひ試してみてください。使用経験のある方は、メッセージを残してご連絡ください。

プロジェクト アドレス:

https://github.com/python/mypy、https://github.com/Microsoft/pyright、https://github .com/google/pytype、https://github.com/facebook/pyre-check

この記事はここで終了しました。その他の興味深いコンテンツについては、PHP 中国語 Web サイト ## をフォローしてください。 Python ビデオ チュートリアル 列!

以上が複数の Python 型チェック ツールの共有の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はsegmentfault.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。