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 回答