2012-11-21 33 views
0

我想有2個結果我怎樣才能重新在python指向一個全局數組

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正在將結果保存到全局數組。 如何將'result'作爲指向我的global_array1或global_array2的指針?

+0

你在你的代碼中的一些語法錯誤... – mgilson

+0

@mgilson * some *? :) –

+0

澄清;你不應該在'global blobal_array1'之後冒號。另外,'result = global global_array1'也是一個SyntaxError。 – mgilson

回答

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] 
+0

我不認爲'全球'是必要的... – mgilson

+0

@mgilson:這不是問題,所以我不認爲它是相關的。我試圖保持我的代碼類似於OP的。 – martineau

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且文檔清晰。