时间:2021-05-22
Fib实例虽然能作用于for循环,看起来和list有点像,但是,把它当成list来使用还是不行,比如,取第5个元素:
>>> Fib()[5]Traceback (most recent call last): File "<stdin>", line 1, in <module>TypeError: 'Fib' object does not support indexing要表现得像list那样按照下标取出元素,需要实现__getitem__()方法:
class Fib(object): def __getitem__(self, n): a, b = 1, 1 for x in range(n): a, b = b, a + b return a现在,就可以按下标访问数列的任意一项了:
>>> f = Fib()>>> f[0]1>>> f[1]1>>> f[2]2>>> f[3]3>>> f[10]89>>> f[100]573147844013817084101slice对象与__getitem__
想要使类的实例像列表一样使用下标, 可以设置__getitem__方法。比如:
class _List(object): def __getitem__(self, key): print keyl = _List()l[3] # print 3但是如果想要使用切片操作的
l[1:4] # print slice(1, 4, None)会创建一个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对象的话,就创建一个实例并返回。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
Python高级专用类方法的实例详解除了__getitem__和__setitem__之外Python还有更多的专用函数。某些可以让你模拟出你甚至可能不知道的功
ndarray对象的内容可以通过索引或切片来访问和修改,与Python中list的切片操作一样。ndarray数组可以基于0-n的下标进行索引,切片对象可以通过
python与GO中操作slice,list的方式实例代码GO代码中遍历slice,寻找某个slice,统计个数。typeElementinterface{}f
本文实例讲述了Python列表切片用法。分享给大家供大家参考,具体如下:Python中符合序列的有序序列都支持切片(slice),例如列表,字符串,元组。格式:
__getitem__来看个简单的例子就明白:def__getitem__(self,key):returnself.data[key]>>>f=fileinf