詳解Python中的__getitem__方法與slice對象的切片操作
Fib實例雖然能作用于for循環(huán),看起來和list有點像,但是,把它當成list來使用還是不行,比如,取第5個元素:
>>> Fib()[5] Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: 'Fib' object does not support indexing
要表現(xiàn)得像list那樣按照下標取出元素,需要實現(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)在,就可以按下標訪問數(shù)列的任意一項了:
>>> f = Fib() >>> f[0] 1 >>> f[1] 1 >>> f[2] 2 >>> f[3] 3 >>> f[10] 89 >>> f[100] 573147844013817084101
slice對象與__getitem__
想要使類的實例像列表一樣使用下標, 可以設(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)
會創(chuàng)建一個slice對象用于切片, 可以通過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是一個整形的話就返回列表元素,如果是一個slice對象的話,就創(chuàng)建一個實例并返回。
- Python類中方法getitem和getattr詳解
- Pyqt清空某一個QTreeewidgetItem下的所有分支方法
- 淺談Python類的__getitem__和__setitem__特殊方法
- 解析Python中的__getitem__專有方法
- Python for i in range ()用法詳解
- Python for循環(huán)及基礎(chǔ)用法詳解
- python中for循環(huán)變量作用域及用法詳解
- python實現(xiàn)發(fā)送form-data數(shù)據(jù)的方法詳解
- Python學習筆記之For循環(huán)用法詳解
- Python for循環(huán)與getitem的關(guān)系詳解
相關(guān)文章
Python連接MySQL數(shù)據(jù)庫并查找表信息
本文主要介紹了Python連接MySQL數(shù)據(jù)庫并查找表信息,通過使用Python中的MySQL Connector模塊,連接到MySQL服務器并執(zhí)行SQL查詢語句,可以獲取表的結(jié)構(gòu)、列信息、行數(shù)據(jù)等,感興趣的可以了解一下2023-08-08
Python Datetime模塊和Calendar模塊用法實例分析
這篇文章主要介紹了Python Datetime模塊和Calendar模塊用法,結(jié)合實例形式分析了Python日期時間及日歷相關(guān)的Datetime模塊和Calendar模塊原理、用法及操作注意事項,需要的朋友可以參考下2019-04-04

