python中getitem_python类__getitem__()方法

Python的__getitem__(self,n)方法为拦截索引运算

当实例s出现s[i]这样的索引运算时,Python会调用这个实例s继承的__getitem__(self,n)方法,并把s作为第一个参数传递(self),将方括号内的索引值 i 传递给第二个参数 n

>>>class Square():

def __getitem__(self,n):

return n**2

>>>s = Square()

>>>s[2]

4

>>>s[6]

36

>>>class Fib():

def __getitem__(self,n):

a,b = 1,1

for x in range(n):

a,b = b, a + b

return a

>>> f = Fib() #创建了一个实例f

>>>f[0] # n = 0, x in range(0)--- x 为空, a = 1

1

>>>f[1] # n = 1, x = 0, a = b = 1,b=2

1

>>>f[2] # n = 2, x=1,a=b=2,b=3

2

>>>class Fib():

def __init__(self):

self.a,self.b = 0, 1

def __iter__(self):

return self

def __next__(self):

self.a, self.b = self.b, self.a + self.b

if self.a > 10000:

raise StopIteration()

return self.a

def __getitem__(self,n):

a,b = 1,1

for x in range(n):

a,b = b, a + b

return a

>>> f = Fib() #现在实例 f 既可以迭代,又可以根据索引来取值

>>>for i in f: #此时Python先寻找__iter__()方法,返回迭代器对象f(实例),它继承了Fib()类的__next__()方法,接下来Python会重复调用实例 f 的next方法,直到抛出StopIteration异常

print(i)

.......

>>>f[0]

1

>>>f[5]

8

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值