任何一个函数包括对象,函数可以被调用说明是一个可调用对象,代表必须有一个可调用方法
A()实例化初始化用的 A()()实例可以作为一个可调用对象
调用就到这个方法里去了__call__
类名()调用是初始化
如果是一个对象,要再被调用,就需要__call__这个方法
但是实例竟然可以当做可调用对象来看
这样可以把一个类封装成可调用对象,也就是实例本身可以当函数用,python有很多其他独特的写法
对实例来讲是个可调用的
把这个实例当函数用
使用缓存减少计算
可调用写__call__,带入index,3,试试看算三这个值该怎么算
初始化就初始化,把计算的交给__call__
现在如果index是3,>= len(self.items)=3
3,3+1,迭代一次
把=号去掉,就直接出问题了
现在算一个50项特别快。用了缓存记录了上次的结果,这里相当于直接用索引取的,速度够快
这两个看起来很相似,内部都是靠方法来实现
一个是把索引当列表来用fib[10]
一个是当做可调用实例来看fib(10)
斐波那契除了索引,还有一个计算长度的问题,当一个可迭代对象用
现在写一个斐波那契数列,可以方便迭代,还可以方便计算
有点问题
1这里有点问题
写成这样就递归了