可能是一個奇怪的問題。但我一直在抓我的頭了,爲什麼,如果你想讓你不能簡單地說list.len()列表的長度,你必須通過列表LEN()來獲得它的大小?這個len()實際上是從哪裏來的?爲什麼len(list)而不是list.len()在python中?
回答
你可以得到很多物品的長度。列表,字典,集合,其他集合。所以調用type(obj).__len__(obj)
內爲您提供了一個標準的API來獲取長度builtin len()
。
如果這些集合類型有len()
方法被稱爲直接就什麼也沒有,以防止有人創建使用例如自定義集合類.length()
或.length
財產。
Here's從吉多·範羅蘇姆,巨蟒的創作者的解釋:
所有的首先,我選擇了
len(x)
爲x.len()
HCI原因(def __len__()
來得更高版本)。有兩種相互交織的原因實際上,兩個HCI:(一)對於某些操作,前綴符號只是讀取比 後綴更好 - 前綴操作具有悠久的傳統 其中的數學符號喜歡的地方(和中綴!)視覺效果幫助數學家思考一個問題。比較將
x*(a+b)
這樣的公式重寫爲x*a + x*b
的難易程度與 的笨拙效果使用原始OO符號做同樣的事情。(b)當我閱讀代碼,說
len(x)
我知道這是要求 的東西的長度。這告訴我兩件事:結果是一個 整數,並且參數是某種容器。相反, 當我讀x.len()
時,我必須已經知道x是某種實現接口的容器或繼承自 標準的len()
的類。見證我們偶爾產生的困惑, 一個沒有實現映射的類有一個get()
或keys()
方法,或者某個不是文件的東西有一個write()
方法。用另一種方式說同樣的事情,我看到'len'作爲內置的 操作。我不想失去那個。我不能肯定你的意思,不過,'def len(self):...'當然聽起來像你 想要降級到一個普通的方法。我強烈的-1。
使用len(obj)而不是對象屬性'length'對我來說聽起來更像Pythonian,它在朗讀時甚至是有意義的。 – 2012-11-12 13:44:24
它實際上來自__len__()
:
In [15]: lis=[1,2,3]
In [16]: lis.__len__()
Out[16]: 3
調用來實現內置函數len()。 應該返回該對象的長度的整數,> = 0。此外,一個 對象不限定非零()方法,並且其len個() 方法返回零被認爲是在假布爾上下文。
- 1. 在python中,len(list)是做什麼的?
- 2. 爲什麼我在Python中找不到`len(list)`?
- 3. 爲什麼str [:len(str)/ 2]而不是str [:len(str)* 0.5]?
- 4. 爲什麼Python中沒有len(文件)?
- 5. python list comprehension set max len
- 6. list [:] = process_list(list)在python中做了什麼?
- 7. 多態性:爲什麼使用「List list = new ArrayList」而不是「ArrayList list = new ArrayList」?
- 8. 範圍(len(list))還是枚舉(list)?
- 9. Area.poly in R:爲什麼Shapefile轉換爲類「list」而不是「gpc.poly」?
- 10. 字符串被分割爲'list()'而不是'[]'爲什麼?
- 11. 爲什麼LEN(<a list object>) so slow?
- 12. python中的list方法是什麼?
- 13. len(列表)在Python中返回1而不是0
- 14. 爲什麼使用packed * args/** kwargs而不是傳遞list/dict?
- 15. 爲什麼Redis SortedSet使用Skip List而不是平衡樹?
- 16. 爲什麼ClassManifest需要Array而不是List?
- 17. 爲什麼我會想用Maybe而不是List?
- 18. 爲什麼OCaml只有first :: rest on list,而不是rest :: last for list?
- 19. 爲什麼不是字典和列表在Python繼承了「len個」功能
- 20. Python - 將list/str中的一些單詞轉爲點。 LEN(名單)?
- 21. 爲什麼我在Python中獲取None而不是True/False?
- 22. 在Python中,爲什麼寫round(x [,n])而不是round(x,n)?
- 23. 在Python中,爲什麼使用日誌而不是打印?
- 24. Python中list [1]和list [1:]之間的區別是什麼?
- 25. Python的len(readlines)爲什麼不等於Bash的'wc -l'命令?
- 26. 爲什麼在python 12.76/106是0.1200000000001而不是0.12?
- 27. list()函數在Python中做什麼?
- 28. 爲什麼=而不是:?
- 29. 爲什麼'list'是Python中的保留字?
- 30. Python len()不好
可能重複[是否有原因Python字符串沒有字符串長度的方法?](http://stackoverflow.com/questions/237128/is-there-a-reason-python-strings- dont-have-a-string-length-method) –