私はPythonプログラマーではありませんが、回答は「はい」と言います。
任意の名前の変数をいつでも作成できる動的言語は、「厳密な」プラグマを使用できます。
Strict vars(Perlで厳密にするためのオプションの1つである 'use strict'は一度にすべてを有効にします)では、すべての変数を使用する前に宣言する必要があります。これは、次のコードを意味します。
my $strict_is_good = 'foo';
$strict_iS_good .= 'COMPILE TIME FATAL ERROR';
コンパイル時に致命的なエラーが生成されます。
私は、コンパイル時にこのコードを拒否するのPythonを取得する方法を知らない:
strict_is_good = 'foo';
strict_iS_good += 'RUN TIME FATAL ERROR';
あなたはstrict_iS_good
が未定義であることを、実行時例外が発生します。しかし、コードが実行されるときだけ。テストスイートのカバレッジが100%でない場合は、このバグを簡単に配布できます。
私はこの動作(例えばPHP)を持っていない言語で作業はいつでも、私が神経質。私は完璧なタイピストではありません。シンプルですが、見つけるのは難しい、タイプミスを追跡するのは難しいかもしれ形で失敗するようにコードを引き起こす可能性があります。
これを繰り返して、YES Pythonはコンパイル時にチェックできるものについてコンパイル時チェックを有効にするために 'strict'プラグマを使用できます。私は追加する任意の他のチェックを考えることはできませんが、より良いPythonプログラマは、おそらくいくつかを考えることができます。
注:私はPerlのstict varsの実用的な効果に焦点を当て、いくつかの細部を覆しています。あなたが本当に知りたい場合は、すべての詳細はthe perldoc for strictを参照してください。
更新:いくつかのコメントへの応答
ジェイソン・ベイカー:pylintのような静的チェッカーが便利です。しかし、彼らはできることがあり、しばしばスキップされる余分なステップを表します。コンパイラへのいくつかの基本的なチェックを構築することで、これらのチェックが一貫して実行されることが保証されます。これらの小切手がプラグマによって制御可能である場合、小切手のコストに関連する異論がなくなる。
popcnt:私はPythonが実行時例外を生成することを知っています。私はそれだけで言った。私は可能な限りコンパイル時間のチェックを主張する。投稿を読み直してください。
mpeters:コードのコンピュータ分析ですべてのエラーを見つけることはできません。これは停止問題を解決することになります。さらに悪いことに、代入を誤ると、コンパイラはの意思をと知り、あなたの意図と目的が異なる場所を見つける必要があります。これは明らかに不可能です。
ただし、これはチェックを行わないことを意味するものではありません。検出が容易な問題のクラスがある場合、それらをトラップすることは理にかなっています。
私はpylintとpycheckerには、どのような種類のエラーが発生するのかよく分かりません。私が言ったように、私はPythonにはとても慣れていません。
これらの静的解析プログラムは便利です。しかし、私は、コンパイラの機能を複製しない限り、コンパイラは静的チェッカよりもプログラムに関する情報を常に知る立場にあると信じています。可能であれば、これを利用してエラーを減らすのは無駄です。
アップデート2:
cdleary - 理論的には、私はあなたに同意は、静的アナライザは、コンパイラができることを、検証を行うことができます。そして、Pythonの場合は、十分でなければなりません。
しかしコンパイラが複雑な場合(特にコンパイルの方法を変更するプラグラムがたくさんある場合や、Perlのようにコンパイル時にコードを実行できる場合)、スタティックアナライザはコンパイラ/インタプリタを使用して解析を行います。
コンパイル時の複雑なコンパイラと実行コードの話は、私のPerlバックグラウンドを示しています。
私の理解は、Pythonにはプラグマがなく、コンパイル時に任意のコードを実行できないということです。したがって、私が間違っていたり、これらの機能が追加されたりしない限り、スタティック・アナライザの比較的単純なパーサで十分です。確かに、実行ごとにこれらのチェックを強制することは有益です。もちろん、私はこれを行う方法はプラグマを使用しています。
プラグマをミックスに追加すると、滑りやすい斜面が始まりました。アナライザーの複雑さは、プラグマで提供する力と柔軟性に比例して大きくなる必要があります。あなたが慎重でないなら、あなたはPerlのように巻くことができます。そして、 "ただPythonだけがPythonを解析できます"と私は見たくない未来です。
たぶんコマンドラインスイッチを強制的に静的解析を追加するためのより良い方法だろう。私はそれがPerlのようなコンパイル時の挙動をいじくることができないことを言うとき)
(決してPythonの機能を反論するつもりかできる。私はこれが慎重に考慮された設計決定であることを勘案し、その中に知恵を見ることができます。コンパイル時のPerlの非常に高い柔軟性は、IMHOであり、言語の大きな強さとひどい弱点です。私はこのアプローチでも知恵を見ています。)
perlでstrictが何をするのか、なぜ必要なのか説明すると少し助けになりますか?なぜ多くの人々はいつもそれを使用していますか?それがなければ何が起こるだろうか? – hasen
"use strict"が実際に何をしているのかについては、私の答えを見てください。この記事には混乱があり、実際に何を意味するのかについてのコメントがあるようです。はいPerlのプログラマーは "厳密に"使用していますが、PerlをJava-yにすることはありません。 – mpeters
もちろんpython 3は、 '非ローカル'宣言を使って複雑なことを(明確にする?) - http://www.python.org/dev/peps/pep-3104/ – popcnt