グローバル変数を一般的に使用すると、プログラムのフローをトレースするため、メンテナンスが悪夢になる可能性があります。また、一部のモジュールが変数を読み取り、他のモジュールが変数の値を変更する前にその値に基づいて動作するため、奇妙なバグが発生することがあります。 (これは、関連のない3番目のモジュールで2つのimportステートメントを反転した結果である可能性があります)。グローバル変数に関するウィキペディアのエントリも参照してください。
これが、可変グローバル変数IMOを回避する必要がある理由であり、Pylintが警告を発行する理由です(おそらく、より多くの変数を発行する必要があります。global
キーワードの使用を検出することは、それらの一部を見つける簡単な方法です)。
誤解しないでください。グローバル変数を使用してはいけないと言っているのではありません。あなたがそれらを使用することを避けるべきであるということだけ。Pythonのグローバル変数には多くの正当なケースがあります。W0603を2つ以上入手しない限り、大丈夫です。
現在、Logilab(Pylintを保守している会社であり、私が以前働いていた場所)は、大量の複製と100以上の可変グローバル変数を使用して、50klocを超えるPythonコードの保守を引き継ぐ必要がありました。そして、これは地獄でした。
グローバル変数を回避するためのソリューションは次のとおりです。
- 変数にアクセスする必要がある関数にパラメーターを追加する
- クラス属性の使用
- インスタンス属性の使用(必要な値をクラスのコンストラクターに渡すことにより)
- プログラムの起動時に(環境変数、コマンドライン、構成ファイルなどを使用して)一度インスタンス化され、その後は変更されないようにビルドされた構成オブジェクトに、変更可能なグローバル値を一元化します。