2016-03-07 18 views
5

私はいくつかのPythonコードを書いていました。いつものように、私は自分の関数を小さくして、それらに明確な名前をつけようとします。私は、グローバル変数がなく、関数が必要とするすべてのものが渡されるという点に到達します。なぜ変数がグローバルではないのですが、関数は大丈夫ですか?

しかし、私はこの場合、すべての機能が他の機能にアクセスできると考えました。他の変数へのアクセスを制限するのと同じように、他の関数へのアクセスを制限しないでください。

私はネストされた関数を使用することを考えていましたが、それはクロージャを意味し、それは私の目的にとってさらに悪いことです。

私はオブジェクトの使用についても考えていましたが、私はこれがOOPのポイントだと思っていましたが、私のケースではあまりにも多くの定型文句になるでしょう。

誰もが彼女/彼の心でこの問題を抱えており、解決策は何ですか?

+0

これは、アプリケーションの状態をほとんど知ることが不可能であると推測させ、頭に保存する必要がある情報の量を増やします。 –

答えて

1

あなたのコードを読んでいる皆さんのために、関数をクラスにグループ化すると、それらを精神的に分類するのに役立ちます。変数selfを使用すると、変数をクラス内でグループ化して整理することもできます。

ファンクション名の先頭には、single leading underscoreでアクセスを制限できます。

+0

うん、これは私が聞きたかったと思います。これは単なる可変性についてではなく、コードの一般的な構造についてです。 – nicusor

7

グローバルを変更可能なデータにすることはお勧めできません。変数。ここでは可変性が重要です。あなたはあなたの心のコンテンツに定数や機能を持たせることができます。

しかし、グローバルに変更可能な状態に依存する関数を書くとすぐに、関数の再利用性が制限されます。それらは常にその1つの共有状態にバインドされています。

0

グローバル変数は、プログラムの状態を追跡することが困難になるため、推奨されません。私が1000行のファイルをデバッグしていて、関数の途中でsome_well_named_flag = Falseと表示されている場合は、それ以外のプログラムにどのように影響するかを調べるために多くの狩りをするつもりです。

機能には状態がありません。プログラムを変更できる場所は、パラメータと戻り値に多かれ少なかれ限定されています。

まだ関数へのアクセスを制御することに懸念がある場合は、JavaやC++のような他の言語もあります。 Pythonの1つのコンベンションでは、クラス外では使用しない関数にアンダースコアを付加し、クラス外から呼び出さないようにすることを信頼します。

関連する問題