2017-01-09 47 views
-1
def mathfunction(): 
    return 1, 2 

(temp1, temp2) = mathfunction() 
array1.append(temp1) 
array2.append(temp2) 
temp1 = [] 
temp2 = [] 
print array1, array2 

正如您所見,此簡單代碼將mathfunction中的值附加到現有數組。我的問題是如果有一種方法可以在不使用額外變量的情況下執行此操作(temp1temp2)。將函數的返回值附加到現有數組

+2

如果你擔心效率,你爲什麼要創建兩個空列表你真的只是加入一些其他的取消引用對象名單?臨時分配是好的,但**使用更好的名稱**,'temp1'告訴讀者什麼都沒有(對於這個問題,'array1'!)另外你不需要括號 - 'temp1,temp2 = mathfunction ()'做這項工作。你真的在這裏有一個可衡量的性能問題嗎? – jonrsharpe

+0

@jonrsharpe是的,你們都是對的。我的錯。 –

+2

沒有給出你需要將它們追加到不同的列表。命名返回值是否真的存在*問題*?這看起來很像過早的優化。 – jonrsharpe

回答

1

可以zip陣列和功能,並使用一個循環:

>>> array1 = [] 
>>> array2 = [] 
>>> def mathfunction(): 
...  return 1, 2 
... 
>>> for a,r in zip((array1,array2),mathfunction()): 
...  a.append(r) 
... 
>>> array1 
[1] 
>>> array2 
[2] 
+0

@Chrisp實際上,這也創建了兩個額外的變量,'a,r',並且可能效率較低*,因爲它具有循環開銷,這在這裏不是必需的...解開返回的元組是解決問題的方法。 –

+2

對於獎勵積分提取'def appender((lst,item)):lst.append(item)'。然後它是可重用的!你可以'映射(appender,zip((array1,array2),mathfunction()))'副作用和收穫你的正義獎勵。 – jonrsharpe

+0

@jonrsharpe我希望你在開玩笑吧! –