亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么Python代碼使用len()函數而不是length方法?

為什么Python代碼使用len()函數而不是length方法?

慕田峪7331174 2019-09-02 09:00:26
我知道python有一個len()用于確定字符串大小的函數,但我想知道為什么它不是字符串對象的方法。更新好吧,我意識到我很尷尬。__len__()實際上是一個字符串對象的方法。使用字符串對象上的len函數在Python中看到面向對象的代碼似乎很奇怪。此外,__len__將名稱視為名稱而不僅僅是len 也是奇怪的。
查看完整描述

3 回答

?
慕桂英3389331

TA貢獻2036條經驗 獲得超8個贊

字符串確實有一個長度方法: __len__()


Python中的協議是在具有長度的對象上實現此方法,并使用內置len()函數為您調用它,類似于您實現__iter__()和使用內置iter()函數的方式(或者使用后面的方法)對于可迭代的對象,你的場景。


有關更多信息,請參閱模擬容器類型。


以下是關于Python協議主題的很好的閱讀:Python和最小驚訝原則


查看完整回答
反對 回復 2019-09-02
?
繁花如伊

TA貢獻2012條經驗 獲得超12個贊

吉姆對這個問題的回答可能有所幫助; 我把它復制在這里。引用Guido van Rossum:

首先,為了HCI的原因,我選擇了len(x)而不是x.len()(def __len __()來得晚了)。實際上有兩個相互交織的原因,都是人機交互:

(a)對于某些操作,前綴表示法只比讀后綴更好 - 前綴(和中綴?。┎僮髟跀祵W中有悠久的傳統,它喜歡視覺效果幫助數學家思考問題的符號。比較我們將x *(a + b)等公式重寫為x a + x b的簡單性,以及使用原始OO表示法做同樣事情的笨拙。

(b)當我讀到代碼為len(x)的代碼時,我知道它是在詢問某些東西的長度。這告訴我兩件事:結果是一個整數,參數是某種容器。相反,當我讀取x.len()時,我必須知道x是某種實現接口的容器,或者是從具有標準len()的類繼承的。當沒有實現映射的類具有get()或keys()方法,或者不是文件的類具有write()方法時,見證我們偶爾會遇到的混淆。

用另一種方式說同樣的事情,我認為'len'是一種內置操作。我不想失去那個。/ ...... /


查看完整回答
反對 回復 2019-09-02
  • 3 回答
  • 0 關注
  • 4645 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號