2

Python のベスト プラクティスを理解しようとしています。グローバル変数にアクセスする (ただし変更しない) 関数を定義する場合、通常、関数で変数をグローバルとして指定する必要はありません。しかし、グローバル変数を関数に渡す方が速いでしょうか? グローバル変数を検索するコストについての言及に出くわしたので質問しますが、理解できるかどうかはわかりません。例えば:

def f1(localList):
    for element in localList:
        if element in globalSet:
            pass #do stuff.

def f2(localList, localSet):
    for element in localList:
        if element in localSet:
            pass #do stuff.

globalList = <arbitrary list>
globalSet  = <arbitrary set>

f1(globalList)
f2(globalList, globalSet)

f2 は一般に、f1 と比較してより高速/より優れた/より「pythonic」なアプローチであると考えられていますか?

4

3 に答える 3

0

globalListデータが関数に緊密にバインドされている場合globalSet、クラスを使用し、それらのリストをクラスプロパティとして定義し、それらの関数をstaticmethods(またはインスタンスメソッド、必要なものは何でも)として定義します

于 2012-04-19T19:17:21.030 に答える
0

グローバル変数は、一般的にプログラミングでは悪い習慣と考えられています。基本的に、変数を見ることができるコードはそれを変更できるからです。特にマルチスレッド プログラムでは、これがバグの原因になる可能性があります。

Python 変数は、オブジェクトの名前または参照と考える必要があります。そのため、変数を関数に渡すことはコストがかかりません。

于 2012-04-19T19:34:33.840 に答える
0

グローバルを使用することは、常に悪い設計上の選択です。いずれにせよ、グローバルを使用しないことで、より Pythonic なソリューションをいつでも思いつくことができます。

  • 関数間で多くの変数を共有する必要がある場合は、OO アプローチを再検討できます。
  • 多くのパラメーターを関数に渡す必要がある場合は、varargs または kargs を選択できます。

パラメータは参照によって渡されるため、効率が低下することはありません。

----特別なケースは、ルールを破るほど特別なものではありません。

于 2012-04-19T19:09:34.480 に答える