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


Posted in Python onDecember 09, 2020

我们都有过函数调用的经历,那么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中,函数也是对象,对象和函数的区别并不显著。

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

Python 相关文章推荐
让 python 命令行也可以自动补全
Nov 30 Python
通过实例浅析Python对比C语言的编程思想差异
Aug 30 Python
MySQL中表的复制以及大型数据表的备份教程
Nov 25 Python
详解Python读取配置文件模块ConfigParser
May 11 Python
Python中的默认参数实例分析
Jan 29 Python
Python中如何导入类示例详解
Apr 17 Python
Python3.5内置模块之shelve模块、xml模块、configparser模块、hashlib、hmac模块用法分析
Apr 27 Python
python实现点击按钮修改数据的方法
Jul 17 Python
Python如何使用函数做字典的值
Nov 30 Python
tensorflow之并行读入数据详解
Feb 05 Python
python实现在列表中查找某个元素的下标示例
Nov 16 Python
Python pyecharts绘制条形图详解
Apr 02 Python
python中的对数log函数表示及用法
Dec 09 #Python
如何利用python正则表达式匹配版本信息
Dec 09 #Python
python基于win32api实现键盘输入
Dec 09 #Python
用python实现一个简单的验证码
Dec 09 #Python
使用Python提取文本中含有特定字符串的方法示例
Dec 09 #Python
python使用正则表达式匹配txt特定字符串(有换行)
Dec 09 #Python
PyTorch中clone()、detach()及相关扩展详解
Dec 09 #Python
You might like
php的sso单点登录实现方法
2015/01/08 PHP
php上传图片生成缩略图(GD库)
2016/01/06 PHP
php mysql_list_dbs()函数用法示例
2017/03/29 PHP
基于PHP实现解密或加密Cloudflar邮箱保护
2020/06/24 PHP
鼠标右击事件代码(asp.net后台)
2011/01/27 Javascript
JS 无限级 Select效果实现代码(json格式)
2011/08/30 Javascript
JS修改css样式style浅谈
2013/05/06 Javascript
Javascript实现滚动图片新闻的实例代码
2013/11/27 Javascript
Js 正则表达式知识汇总
2014/12/02 Javascript
利用JQuery写一个简单的异步分页插件
2016/03/07 Javascript
jquery.validate[.unobtrusive]和Bootstrap实现tooltip错误提示问题分析
2016/10/30 Javascript
用jQuery旋转插件jqueryrotate制作转盘抽奖
2017/02/10 Javascript
Angular.js初始化之ng-app的自动绑定与手动绑定详解
2017/07/31 Javascript
angular 数据绑定之[]和{{}}的区别
2018/09/25 Javascript
Javascript中绑定click事件的四种方式介绍
2018/10/26 Javascript
vue实现微信二次分享以及自定义分享的示例
2019/03/20 Javascript
JavaScript如何实现图片处理与合成
2020/05/29 Javascript
vue引入静态js文件的方法
2020/06/20 Javascript
Python时间戳与时间字符串互相转换实例代码
2013/11/28 Python
Python删除windows垃圾文件的方法
2015/07/14 Python
在Django的URLconf中使用命名组的方法
2015/07/18 Python
Python排序搜索基本算法之希尔排序实例分析
2017/12/09 Python
修复CentOS7升级Python到3.6版本后yum不能正确使用的解决方法
2018/01/26 Python
python交换两个变量的值方法
2019/01/12 Python
Python 类,property属性(简化属性的操作),@property,property()用法示例
2019/10/12 Python
基于Python实现扑克牌面试题
2019/12/11 Python
python轮询机制控制led实例
2020/05/03 Python
python3中确保枚举值代码分析
2020/12/02 Python
高尔夫球鞋、服装、手套和装备:FootJoy
2018/12/15 全球购物
自我鉴定书范文
2013/10/02 职场文书
工程总经理工作职责
2013/12/09 职场文书
采购人员的个人自我评价
2014/01/16 职场文书
法学院毕业生求职信
2014/06/25 职场文书
公务员上班玩游戏检讨书
2014/09/17 职场文书
就业推荐表自我评价范文
2015/03/02 职场文书
2015年高三班主任工作总结
2015/05/21 职场文书