当前位置 博文首页 > call在Python中改进数列的实例讲解

    call在Python中改进数列的实例讲解

    作者:小妮浅浅 时间:2021-08-05 18:24

    我们都有过函数调用的经历,那么call调用类实例的过程就跟函数很相似。类的用法很多人都知道了,类实例又是什么呢?可以把类看成一个设计图,类实例就是设计出的成品。现在我们弄清楚了call调用对象的概念,就可以进一步用来在python中改进数组,想学的小伙伴一起往下看吧。

    __call__()

    Python里,函数式first-class对象,这表示,函数可以被传递给另外的函数或者方法,可以从子程序里返回,可以赋给变量。

    类的实例也可以像函数一样被对待,比如将他们传递给其他的函数或者方法,并且被调用。想要达到这个目的,就要在类里专门定义__call__()方法。

    def __call__(self, [args ...]) 它接受一系列参数。假设x是类X的一个实例 , x.__call__(1, 2) 就等价于调用x(1,2),而实例x仿佛就是一个函数。

    改进一下斐波那契数列:

    class Fib(object):

    请加一个__call__方法,让调用更简单:

    >>> f = Fib()
    >>> print(f(10))
    [0, 1, 1, 2, 3, 5, 8, 13, 21, 34]

    可以把实例对象用类似函数的形式表示,进一步模糊了函数和对象之间的概念。

    class Fib(object):
     def __init__(self):
      pass
     def __call__(self,num):
      a,b = 0,1;
      self.l=[]
      for i in range (num):
       self.l.append(a)
       a,b= b,a+b
      return self.l
     def __str__(self):
      return str(self.l)
     __rept__=__str__ 
    f = Fib()
    print(f(10))

    __call__()知识点扩展

    在Python中,函数其实是一个对象:

    >>> f = abs
    >>> f.__name__
    'abs'
    >>> f(-123)

    由于 f 可以被调用,所以,f 被称为可调用对象。

    所有的函数都是可调用对象。

    一个类实例也可以变成一个可调用对象,只需要实现一个特殊方法__call__()。

    我们把 Person 类变成一个可调用对象:

    class Person(object):
    def __init__(self, name, gender):
    self.name = name
    self.gender = gender
     
    def __call__(self, friend):
    print 'My name is %s...' % self.name
    print 'My friend is %s...' % friend

    现在可以对 Person 实例直接调用:

    >>> p = Person('Bob', 'male')
    >>> p('Tim')
    My name is Bob...
    My friend is Tim...

    单看 p('Tim') 你无法确定 p 是一个函数还是一个类实例,所以,在Python中,函数也是对象,对象和函数的区别并不显著。

    关于次知识点的思考和扩展,站长博客会在后续整理和补充,感谢大家对站长博客的支持。

    jsjbwy
下一篇:没有了