2014-09-26 80 views
0

這兩行代碼爲什麼會做任何不同的事情?在一行中導致問題的多個python函數

visited_with_path.append(deep_copy(get_path_to_point(from_point)).append(point)) 

x = deep_copy(get_path_to_point(from_point)) 
    x.append(point) 
    visited_with_path.append(x) 

我只花了一大堆時間的調試,直到我試圖使上面的變化(從第一到第二),雖然它解決了這一問題,我不知道爲什麼。他們似乎應該具有相同的功能。

如果有幫助,visited_with_path是點列表的列表,deep_copy將這個列表的深層副本,get_path_to_point輸入一個點並返回一列點,from_point和point只是點。

有什麼想法?

+0

因爲'.append'就位,所以返回'None' – jonrsharpe 2014-09-26 18:01:42

+0

即使'append'返回了對被追加到的列表的引用,該單行內容太不可讀,無法被推薦。另外,不同的人可能會承擔不同的事情:我會假設'append'會返回對列表的引用,以便您一次追加多個項目;你認爲它會返回一個對正在*附加的時間*的引用。 – chepner 2014-09-26 18:12:30

回答

3

.append不返回任何東西 - 它修改到位名單,所以你基本上追加deep_copy(get_path_to_point(from_point))visited_with_path,返回None,然後試圖向.append(point)None,這是行不通的。

+0

事實上,沒有顯式返回的函數返回'None'而不是提高某種連續性錯誤,這在調試時絆倒了許多人。 – aruisdante 2014-09-26 18:03:48