新聞中心
曾經(jīng)有人在Twitter上問我為什么Python使用以0為首位的數(shù)組索引法(0-based),并且還給我了一個(gè)相關(guān)優(yōu)秀文章的鏈接。這讓我想起許多往事:Python的前身之一,ABC語言使用的是以1為首位的數(shù)組索引方式(1-based),而對Python有著巨大影響的C語言則使用的是0-based。我早期開發(fā)的程序語言(Algol、Fortran、Pascal)有的使用1-based,有的則比較靈活。我認(rèn)為切片語法是我做出這個(gè)決定的原因之一。

創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比鉛山網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式鉛山網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋鉛山地區(qū)。費(fèi)用合理售后完善,十多年實(shí)體公司更值得信賴。
我們先來看看切片語法的使用吧。它最常見的使用應(yīng)該是“切出數(shù)組的前n位”和“切出數(shù)組第i位后的 n位”(前者是后者在i==起始位下的特例)。如果我們不需要使用難看的+1或-1補(bǔ)償方式,那么代碼就會(huì)美觀許多。
通過使用0-based索引法,Python的半開區(qū)間以及缺省匹配區(qū)間都很美觀,如:a[:n] 和a[i:i+n];前者是a[0:n]的省略寫法。
在1-based索引法下,如果你想用a[:n]來表示切出前n個(gè)元素的話,你只能選擇在切片語法中使用切片起始位和切片長度2個(gè)參數(shù),或者閉區(qū)間的用法。使用1-based索引法,半開區(qū)間切片語法就顯得不夠美觀。同樣地,使用閉區(qū)間切片語法的話,你只能用a[i:i+n-1]來表示從第i位取n個(gè)元素。所以如果使用1-based索引法的話,使用切片長度更合適。你可以寫成a[i:n]。事實(shí)上,ABC語言就是這樣的——它用了一種特殊的用法,寫為a@i|n。(參考http://homepages.cwi.nl/~steven/abc/qr.html#EXPRESSIONS)
但是index:length的用法適合其它情況嗎?老實(shí)說,我不太記得了,但我想我當(dāng)時(shí)的確很喜歡它美觀的半開區(qū)間語法。特別是兩個(gè)切片操作位置相鄰并且***個(gè)切片操作的終點(diǎn)索引就是第二個(gè)切片的起點(diǎn)索引的時(shí)候,它的寫法實(shí)在是太漂亮了。比如,你想以i , j兩點(diǎn)來切分一個(gè)數(shù)組的話,它們將會(huì)是a[:i]、a[i:j]、和 a[j:]。
這就是Python 使用0-based索引法的原因。
本文標(biāo)題:Python之父:為什么Python數(shù)組下標(biāo)從0開始
網(wǎng)站鏈接:http://fisionsoft.com.cn/article/dhpeess.html


咨詢
建站咨詢
