W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
你的程序已經(jīng)出現(xiàn)一大堆已無(wú)法直視的硬編碼切片下標(biāo),然后你想清理下代碼。
假定你有一段代碼要從一個(gè)記錄字符串中幾個(gè)固定位置提取出特定的數(shù)據(jù)字段(比如文件或類似格式):
###### 0123456789012345678901234567890123456789012345678901234567890'
record = '....................100 .......513.25 ..........'
cost = int(record[20:23]) * float(record[31:37])
與其那樣寫(xiě),為什么不想這樣命名切片呢:
SHARES = slice(20, 23)
PRICE = slice(31, 37)
cost = int(record[SHARES]) * float(record[PRICE])
第二種版本中,你避免了大量無(wú)法理解的硬編碼下標(biāo),使得你的代碼更加清晰可讀了。
一般來(lái)講,代碼中如果出現(xiàn)大量的硬編碼下標(biāo)值會(huì)使得可讀性和可維護(hù)性大大降低。比如,如果你回過(guò)來(lái)看看一年前你寫(xiě)的代碼,你會(huì)摸著腦袋想那時(shí)候自己到底想干嘛啊。這里的解決方案是一個(gè)很簡(jiǎn)單的方法讓你更加清晰的表達(dá)代碼到底要做什么。
內(nèi)置的slice()函數(shù)創(chuàng)建了一個(gè)切片對(duì)象,可以被用在任何切片允許使用的地方。比如:
>>> items = [0, 1, 2, 3, 4, 5, 6]
>>> a = slice(2, 4)
>>> items[2:4]
[2, 3]
>>> items[a]
[2, 3]
>>> items[a] = [10,11]
>>> items
[0, 1, 10, 11, 4, 5, 6]
>>> del items[a]
>>> items
[0, 1, 4, 5, 6]
如果你有一個(gè)切片對(duì)象s,你可以分別調(diào)用它的s.start, s.stop, s.step屬性來(lái)獲取更多的信息。比如:
>>> a = slice(5, 50, 2)
>>> a.start
5
>>> a.stop
50
>>> a.step
2
>>>
另外,你還能通過(guò)調(diào)用切片的indices(size)方法將它映射到一個(gè)確定大小的序列上,這個(gè)方法返回一個(gè)三元組(start,stop,step),所有值都會(huì)被合適的縮小以滿足邊界限制,從而使用的時(shí)候避免出現(xiàn)IndexError異常。比如:
>>> s = 'HelloWorld'
>>> a.indices(len(s))
(5, 10, 2)
>>> for i in range(*a.indices(len(s))):
... print(s[i])
...
W
r
d
>>>
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: