如果list
是Python中的一個保留字,我剛剛得到了一個可能被阻止的錯誤。 (當然是Dumbery)爲什麼'list'是Python中的保留字?
那麼,爲什麼不列出(或字典或浮動或任何類型)保留字?添加解釋器錯誤似乎比嘗試和記住規則更容易。
(我也知道的Eclipse/PyDev的有會提醒你這個規則,這可能是有用的設置。)
如果list
是Python中的一個保留字,我剛剛得到了一個可能被阻止的錯誤。 (當然是Dumbery)爲什麼'list'是Python中的保留字?
那麼,爲什麼不列出(或字典或浮動或任何類型)保留字?添加解釋器錯誤似乎比嘗試和記住規則更容易。
(我也知道的Eclipse/PyDev的有會提醒你這個規則,這可能是有用的設置。)
只有keywords被保留。
list
不是一個關鍵字,但內置的類型,是str
,set
,dict
,unicode
,int
,float
等
有一個在保留每一個可能毫無意義內置型; python是一種動態語言,如果你想用本地名稱來替換內置類型,你應該能夠。
認爲list
和其他類型爲預先導入的對象類型庫;您不希望collections
的defaultdict
被保留嗎?使用static code analyzer來捕捉這些錯誤;大多數IDE讓你輕鬆整合一個。
這個問題已經在郵件列表上提出了大概一年一次,有人建議它至少應該是一個警告,如果不是錯誤的話。 ,共識是,「這不應該用語言,但有人應該建立一個良好的棉絨。」每一次從那以後,這是「人們建立良好的短絨已經處理了這個,所以使用它。「如果任何人有任何這些線程的鏈接來給出理由,這可能會有所幫助。 – abarnert
@abarnert:我能找到的所有關於允許關鍵字作爲2000年IronPython的標識符的討論.. –
是的,我在發佈之前自己搜索了它,並且找不到任何更簡單的東西。但我知道我已經看到它反覆出現,形式從「'None'應該是關鍵字」到「builtin中的所有內容都應該是關鍵字」,有時引用解釋器優化機會而不是錯誤檢查......哦,我認爲答案已經足夠好了。 – abarnert
可能出於同樣的原因,哪些類不具有私有屬性。這是Python的精神。
看一看這樣:http://docs.python.org/2/reference/lexical_analysis.html#keywords
list
是一個簡單的類型,而不是保留(既不是int
,float
,dict
,str
......你明白了吧)。
這是一個意見問題,但這是我的2c。
保留一個關鍵字是一件大事,因爲它基本上意味着你永遠不能在代碼中使用該關鍵字,所以它通常被認爲是很好的編程語言設計來保持列表的簡短。 (perl沒有,但是perl與大多數其他編程語言有着完全不同的哲學,並且在變量之前使用特殊符號來設法防止衝突)。
無論如何,看看爲什麼是這種情況,考慮向前兼容性。想象一下,Python開發者決定array
是一個基本的概念,他們想讓它成爲內置的(不是不可思議的 - 這發生在set
in,um,python 2.6?)。如果內置函數被自動保留,那麼之前曾使用array
作爲其他內容的任何人(即使明確導入爲from superfastlist import array
),或者實現了自己的(numpy
已經這樣做),他們會突然發現他們的代碼不起作用,他們'非常憤怒。
(對於這個問題,考慮是否help
被做了保留字 - 無數個庫,包括argparse,使用help
作爲關鍵字參數)
我想說的是製作向後兼容性 - Python的開創性決定並非沒有歷史先例。我想我會看到list(或int或dict)不是保留字,因爲它是時間炸彈 - 在你花費大量時間調試某些東西之前,你不知道你犯了一個錯誤。我認爲權衡是你獲得了可用性,但是損失相對較小。 – BenDundee
假設'list'是一個保留字。那麼如果你想*這樣做,你將如何改變它提到的類型? – kindall
如果您擔心這些錯誤,請使用['pylint'](http://pypi.python。例如,'pylint'會給你''W:3,0:重新定義內置的函數,在'list'中。 – abarnert
@kindall:這是一種內置類型的常見用例嗎? – BenDundee