2009-10-08 72 views
0

這個問題只是出於一般的好奇心。我剛剛在當前項目中工作時注意到了這一點(令人驚訝的是我今天還沒有發現)。不能刪除函數調用

把這個代碼:

List = ["hi","stack","over","flow","how","you","doing"] 
del List(len(List)-1) 

錯誤:

SyntaxError: can't delete function call 

我不明白爲什麼你不能通過引用到一個函數的調用來刪除列表中的索引?我只是閉嘴,接受你不能這樣做,或者我正在做一些根本錯誤的事情嗎?

我很抱歉,如果有一個簡單的答案,但谷歌變得不那麼有用,或者這是非常明顯的,我需要幫助。

+2

這是一個壞主意,調用列表實例'List',你可以很容易混淆一個用於其他 – 2009-10-08 10:26:25

+0

。請修正這個問題的標題,你的意圖不是刪除一個函數調用,而是使用一個帶有delete的函數調用,而不是「刪除函數調用」,而是「使用del函數調用」,或者更清晰的更多地描述你想要做什麼 – 2009-10-08 10:44:05

+0

「刪除函數調用的結果」,可能是 – 2009-10-08 10:46:55

回答

12

你的意思是刪除列表的最後一個元素,而不是莫名其妙地叫List作爲一個函數:

del List[len(List)-1] 

Python的del語句必須採取的具體形式,如刪除一個變量,列表[元],或對象。屬性。這些形式可以深入嵌套,但必須遵循。它與賦值語句相似 - 如果嘗試分配給函數調用,則會出現類似的語法錯誤。

當然,你真的在這種情況下是

del List[-1] 

這意味着該列表的最後一個元素,並且是方式更Python。

+0

+1:刪除可能與一個函數的調用一起工作,但這個例子顯然是一個名爲List的對象。不是名爲List的函數。 – 2009-10-08 10:41:54

+0

不,不管它是否是語法錯誤。最簡單的形式「del x」意味着刪除名稱「x」。 「del x [y]」和「del x.y」以y爲參數向對象x發送各種消息。雖然你可能想出一個有效的用例來定義「del x(y)」,但它不是Python。 – 2009-10-08 10:46:12

5

當您應將索引編制爲列表List[]時,您正在調用函數List()

在Python中,圓括號()用於調用函數,而方括號[]用於索引列表和其他序列。

嘗試:

del List[len(List) - 1] 

,甚至更好,用事實Python允許負索引,從尾部開始計數:

del List[-1] 

此外,您可能想使列表的名稱不因此爲了清晰起見,請儘量靠近內置的list類型名稱。

+0

哦,對於上帝的愛,我覺得自己像個白癡。非常感謝! – Federer 2009-10-08 10:22:57

+2

List [len(List) - 1]不是「pythonic」,你需要按照jleedev的建議做List [-1]。 – Kimvais 2009-10-08 10:24:44

+0

@Kimvais:好點,我補充說。 – unwind 2009-10-08 10:26:48

1

你被允許。但是,您正在使用錯誤的語法。正確的語法是:

del List[-1] 

注意,「LEN(名單)部分是沒有用的