gpt4 book ai didi

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

转载 作者:qq735679552 更新时间:2022-09-29 22:32:09 26 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章call在Python中改进数列的实例讲解由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

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

__call__() 。

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

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

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

改进一下斐波那契数列:

?
1
class Fib( object ):

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

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

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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中,函数其实是一个对象:

?
1
2
3
4
>>> f = abs
>>> f.__name__
'abs'
>>> f( - 123 )

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

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

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

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

?
1
2
3
4
5
6
7
8
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 实例直接调用:

?
1
2
3
4
>>> p = Person( 'Bob' , 'male' )
>>> p( 'Tim' )
My name is Bob...
My friend is Tim...

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

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

原文链接:https://www.py.cn/jishu/jichu/21779.html 。

最后此篇关于call在Python中改进数列的实例讲解的文章就讲到这里了,如果你想了解更多关于call在Python中改进数列的实例讲解的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com