詳解Python中的__getitem__方法與slice對(duì)象的切片操作
Fib實(shí)例雖然能作用于for循環(huán),看起來(lái)和list有點(diǎn)像,但是,把它當(dāng)成list來(lái)使用還是不行,比如,取第5個(gè)元素:
>>> Fib()[5] Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: 'Fib' object does not support indexing
要表現(xiàn)得像list那樣按照下標(biāo)取出元素,需要實(shí)現(xiàn)__getitem__()方法:
class Fib(object):
def __getitem__(self, n):
a, b = 1, 1
for x in range(n):
a, b = b, a + b
return a
現(xiàn)在,就可以按下標(biāo)訪問(wèn)數(shù)列的任意一項(xiàng)了:
>>> f = Fib() >>> f[0] 1 >>> f[1] 1 >>> f[2] 2 >>> f[3] 3 >>> f[10] 89 >>> f[100] 573147844013817084101
slice對(duì)象與__getitem__
想要使類(lèi)的實(shí)例像列表一樣使用下標(biāo), 可以設(shè)置__getitem__方法。比如:
class _List(object):
def __getitem__(self, key):
print key
l = _List()
l[3] # print 3
但是如果想要使用切片操作的
l[1:4] # print slice(1, 4, None)
會(huì)創(chuàng)建一個(gè)slice對(duì)象用于切片, 可以通過(guò)help(slice)查看具體操作。
a = slice(1, 4, None) range(5)[a] # print [1, 2, 3]
更加豐富的操作
class _List(object):
def __init__(self, _list):
self._list = _list
def __getitem__(self, key):
if isinstance(key, int):
return self._list[key]
elif isinstance(key, slice):
reutrn self.__class__(self._list[key])
if __name__ == '__main__':
c = _List(range(10))
b = c[1:5]
print b[3] # print 4
如果key是一個(gè)整形的話(huà)就返回列表元素,如果是一個(gè)slice對(duì)象的話(huà),就創(chuàng)建一個(gè)實(shí)例并返回。
- Python類(lèi)中方法getitem和getattr詳解
- Pyqt清空某一個(gè)QTreeewidgetItem下的所有分支方法
- 淺談Python類(lèi)的__getitem__和__setitem__特殊方法
- 解析Python中的__getitem__專(zhuān)有方法
- Python for i in range ()用法詳解
- Python for循環(huán)及基礎(chǔ)用法詳解
- python中for循環(huán)變量作用域及用法詳解
- python實(shí)現(xiàn)發(fā)送form-data數(shù)據(jù)的方法詳解
- Python學(xué)習(xí)筆記之For循環(huán)用法詳解
- Python for循環(huán)與getitem的關(guān)系詳解
相關(guān)文章
Python打印特殊符號(hào)及對(duì)應(yīng)編碼解析
這篇文章主要介紹了Python打印特殊符號(hào)及對(duì)應(yīng)編碼解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-05-05
python plotly畫(huà)柱狀圖代碼實(shí)例
這篇文章主要介紹了python plotly畫(huà)柱狀圖代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-12-12
Python?數(shù)據(jù)類(lèi)型--集合set
這篇文章主要介紹了Python?數(shù)據(jù)類(lèi)型集合set,在集合中的元素是無(wú)序的、唯一的、不可變的類(lèi)型,它還有一個(gè)特殊的列表,可以對(duì)數(shù)據(jù)去重,下面來(lái)對(duì)其進(jìn)行更徹底的認(rèn)識(shí)吧,需要的小伙伴可以參考一下2022-02-02
Python連接MySQL數(shù)據(jù)庫(kù)并查找表信息
本文主要介紹了Python連接MySQL數(shù)據(jù)庫(kù)并查找表信息,通過(guò)使用Python中的MySQL Connector模塊,連接到MySQL服務(wù)器并執(zhí)行SQL查詢(xún)語(yǔ)句,可以獲取表的結(jié)構(gòu)、列信息、行數(shù)據(jù)等,感興趣的可以了解一下2023-08-08
Python Datetime模塊和Calendar模塊用法實(shí)例分析
這篇文章主要介紹了Python Datetime模塊和Calendar模塊用法,結(jié)合實(shí)例形式分析了Python日期時(shí)間及日歷相關(guān)的Datetime模塊和Calendar模塊原理、用法及操作注意事項(xiàng),需要的朋友可以參考下2019-04-04

