0

結果用に 2 つのグローバル配列が必要です

global_array1 = []
global_array2 = []

私の関数では、条件に応じて異なる配列に値を追加します。

def myfunc():
  global global_array1:
  global global_array2:

  result =[]

  for a in anArray:
      if some_condition == True:
          result = global global_array1
      else 
          result = global_array2

      # do something hhere
      result.append(aResult)

しかし、試してみると、myFunction が結果をグローバル配列に保存していることはわかりません。global_array1 または global_array2 のいずれかへのポインターとして「結果」を作成するにはどうすればよいですか?

4

2 に答える 2

3

これはとても簡単です:

>>> def add(v,which):
...    c = a if which else b
...    c.append(v)
... 
>>> a = []
>>> b = []
>>> add(1,True)
>>> add(2,True)
>>> add(3,False)
>>> a
[1, 2]
>>> b
[3]

ただし、これは非常に壊れやすいコード設計のようです。通常、副作用のある関数は望ましくありません (クラスなどのインスタンス メソッドとして使用されている場合を除きます。また、バインドされているインスタンスのみを変更する必要がありますself)。

グローバル データを変更する関数はさらに恐ろしいものです。通常は、データを引数として関数に渡し、関数が変更されたバージョンを返すようにすることをお勧めします。引数の変更も問題ありませんが、関数が戻りNone、ドキュメントが明確である場合に限ります。

于 2012-11-21T20:15:56.387 に答える
0

以下は、コードに似ていますが、実際には実行され、問題なく動作するようです。

global_array1 = []
global_array2 = []

def myfunc(aResult, anArray):
  global global_array1
  global global_array2

  for a in anArray:
      if a:
          result = global_array1
      else:
          result = global_array2

      # do something hhere
      result.append(aResult)

anArray = [True, True, False]

myfunc(1, anArray)
myfunc(2, anArray)
myfunc(3, anArray)

print 'global_array1:', global_array1
print 'global_array2:', global_array2

出力:

global_array1: [1, 1, 2, 2, 3, 3]
global_array2: [1, 2, 3]
于 2012-11-21T21:25:31.050 に答える