2014-10-09 35 views
-3

今天我參加了計算機科學課,老師在板子上放了一段python編碼,並說他不知道爲什麼它不工作。他向我們展示的功能,說:Python函數是否修改它們的參數?

def app(x): 
    x.append(" ") 
    print(x) 

def ext(x,y): 
    x.extend(y) 
    print(y) 

nums = [1,2,3,4,5,6] 
numbers = [7,8,9,10] 

app(nums) 
ext(nums,numbers) 

print("End of program") 

的代碼是爲了展示如何,當你不輸入

return x 
在功能

那麼當您返回到該變量不發生變化主程序然而,當他跑的程序,首先添加函數的空間,並保持它存在時,它返回導致下面的文本正在印刷...

['1','2','3','4','5','6',' '] 
['1','2','3','4','5','6',' ','7','8','9','10'] 
End of program 

請幫助我。

+1

到底是什麼問題? – 2014-10-09 21:37:07

+1

您正在操作'nums'和'x'引用的對象。你並沒有操縱'x'指的是什麼。如果你的手指指向月亮(而不是月亮本身),那麼你沒有改變你的手指指向的地方,而是實際上跟着手指並在月球上劃上了一面旗幟。 – 2014-10-09 21:38:07

+3

你需要一個更好的老師......一個對象和對該對象的引用之間的區別(實際上是在這個示例中傳遞的)是非常非常基本的。 – Cameron 2014-10-09 21:38:33

回答

2

你說的重點是要證明一個列表不會被改變,除非它被返回。這是錯誤的。該列表是一個可變對象。當你通過它(的名字)並改變它,它會被改變。如果您不想要更改,則需要使用副本。

+0

+1用於識別那裏的問題並解釋可變對象 – 2014-10-09 21:43:02

+1

雖然,我會指出這是通過「通過引用」和不是「按名稱」。您應該編輯您的答案以包含該更改。 – b4hand 2014-10-09 21:44:21

+0

這不是通過引用傳遞。 「通過引用傳遞」是一種技術,其中函數中的參數是對調用方中名稱的引用。這在Python中是不可能的。但你是對的,它也不是「通過名字」! Python的最佳術語是「通過共享」。 – 2014-10-09 22:07:48

0
def app(x): 
    return x + [" "] 


def ext(x,y): 
    return x + y 

可能是你正在嘗試做的...林不知道,這不會改變任何原有名單,但將返回一個新的列表作爲結果

相關問題