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中使用xlrd、xlwt操作excel表格详解
Jan 29 Python
Python的mysql数据库的更新如何实现
Jul 31 Python
Python 高级专用类方法的实例详解
Sep 11 Python
Python实现扣除个人税后的工资计算器示例
Mar 26 Python
python3+PyQt5实现自定义分数滑块部件
Apr 24 Python
Python图片转换成矩阵,矩阵数据转换成图片的实例
Jul 02 Python
Pandas 数据处理,数据清洗详解
Jul 10 Python
运用Python的webbrowser实现定时打开特定网页
Feb 21 Python
python tkinter窗口最大化的实现
Jul 15 Python
对python中的float除法和整除法的实例详解
Jul 20 Python
在keras下实现多个模型的融合方式
May 23 Python
django rest framework 自定义返回方式
Jul 12 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
神族 Protoss 历史背景
2020/03/14 星际争霸
smarty section简介与用法分析
2008/10/03 PHP
PHP会话处理的10个函数
2015/08/11 PHP
php无限分类使用concat如何实现
2015/11/05 PHP
PHP实现网站应用微信登录功能详解
2019/04/11 PHP
JS URL传中文参数引发的乱码问题
2009/09/02 Javascript
js浮点数精确计算(加、减、乘、除)
2013/12/26 Javascript
jquery toolbar与网页浮动工具条具体实现代码
2014/01/12 Javascript
快速掌握WordPress中加载JavaScript脚本的方法
2015/12/17 Javascript
15位和18位身份证JS校验的简单实例
2016/07/18 Javascript
14 个折磨人的 JavaScript 面试题
2016/08/08 Javascript
关于JSON与JSONP简单总结
2016/08/16 Javascript
微信小程序使用input组件实现密码框功能【附源码下载】
2017/12/11 Javascript
angular项目中bootstrap-datetimepicker时间插件的使用示例
2018/03/15 Javascript
微信小程序实现的picker多级联动功能示例
2019/05/23 Javascript
[52:52]DOTA2上海特级锦标赛C组资格赛#1 OG VS LGD第三局
2016/02/27 DOTA
python中stdout输出不缓存的设置方法
2014/05/29 Python
python实现每次处理一个字符的三种方法
2014/10/09 Python
python flask 多对多表查询功能
2017/06/25 Python
Python将图片转换为字符画的方法
2020/06/16 Python
pytorch 数据处理:定义自己的数据集合实例
2019/12/31 Python
Python爬虫开发与项目实战
2020/12/16 Python
浅谈h5自定义audio(问题及解决)
2016/08/19 HTML / CSS
Charlotte Tilbury英国官网:英国彩妆品牌
2017/05/26 全球购物
Clos19英国:高档香槟、葡萄酒和烈酒在线购物平台
2020/07/10 全球购物
DataList 能否分页,请问如何实现?
2015/05/03 面试题
英语系毕业生自荐信
2013/10/31 职场文书
市场营销求职信范文
2014/02/21 职场文书
小学生评语集锦
2014/04/18 职场文书
企业党建工作汇报材料
2014/08/19 职场文书
营销与策划实训报告
2014/11/05 职场文书
教师工作总结范文2014
2014/11/10 职场文书
中国汉字听写大会观后感
2015/06/02 职场文书
2016教师读书思廉心得体会
2016/01/23 职场文书
Golang 使用Map实现去重与set的功能操作
2021/04/29 Golang
SpringBoot实现异步事件驱动的方法
2021/06/28 Java/Android