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脚本关闭文件操作的机制
Jun 28 Python
Python实现读写sqlite3数据库并将统计数据写入Excel的方法示例
Aug 07 Python
Python实现自动为照片添加日期并分类的方法
Sep 30 Python
基于Python中numpy数组的合并实例讲解
Apr 04 Python
python保存文件方法小结
Jul 27 Python
Python中dict和set的用法讲解
Mar 28 Python
Python发展简史 Python来历
May 14 Python
树莓派采用socket方式文件传输(python)
Jun 22 Python
Django多数据库的实现过程详解
Aug 01 Python
解决pycharm安装第三方库失败的问题
May 09 Python
OpenCV-Python实现轮廓拟合
Jun 08 Python
Python字符串格式化方式
Apr 07 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
phpMyAdmin出现无法载入 mcrypt 扩展,请检查PHP配置的解决方法
2012/03/26 PHP
点击下载链接 弹出页面实现代码
2009/10/01 Javascript
jQuery 类twitter的文本字数限制带提示效果插件
2010/04/16 Javascript
location.search在客户端获取Url参数的方法
2010/06/08 Javascript
jQuery中的bind绑定事件与文本框改变事件的临时解决方法
2010/08/13 Javascript
url地址自动加#号问题说明
2010/08/21 Javascript
处理及遍历XML文档DOM元素属性及方法整理
2013/08/23 Javascript
js判断字符长度以及中英文数字等
2013/12/31 Javascript
jQuery中DOM树操作之使用反向插入方法实例分析
2015/01/23 Javascript
基于javascript实现checkbox复选框实例代码
2016/01/28 Javascript
解决Jstree 选中父节点时被禁用的子节点也会选中的问题
2017/12/27 Javascript
微信小程序自定义可滑动日历界面
2018/12/28 Javascript
js中switch语句的学习笔记
2020/03/25 Javascript
在react-antd中弹出层form内容传递给父组件的操作
2020/10/24 Javascript
[45:10]NB vs Liquid Supermajor小组赛 A组胜者组决赛 BO3 第二场 6.2
2018/06/04 DOTA
[48:18]DOTA2-DPC中国联赛 正赛 RNG vs Dynasty BO3 第二场 1月29日
2021/03/11 DOTA
python实现稀疏矩阵示例代码
2017/06/09 Python
Python操作csv文件实例详解
2017/07/31 Python
详解Django rest_framework实现RESTful API
2018/05/24 Python
详解numpy矩阵的创建与数据类型
2019/10/18 Python
python使用Word2Vec进行情感分析解析
2020/07/31 Python
python的flask框架难学吗
2020/07/31 Python
Python list和str互转的实现示例
2020/11/16 Python
美国床垫和床上用品公司:Nest Bedding
2017/06/12 全球购物
澳大利亚汽车零部件、音响及配件超市:Automotive Superstore
2018/06/19 全球购物
英国PC组件和在线电脑商店:SCAN
2019/04/18 全球购物
Vrbo西班牙:预订您的度假公寓(公寓、乡村房屋…)
2020/04/27 全球购物
建筑工程管理专业自荐信范文
2013/12/28 职场文书
四年大学生活的自我评价范文
2014/02/07 职场文书
致800米运动员广播稿
2014/02/16 职场文书
双语教学实施方案
2014/03/23 职场文书
暑假社会实践证明格式
2014/10/28 职场文书
python自动统计zabbix系统监控覆盖率的示例代码
2021/04/03 Python
使用tensorflow 实现反向传播求导
2021/05/26 Python
Lombok的详细使用及优缺点总结
2021/07/15 Java/Android
Python干货实战之八音符酱小游戏全过程详解
2021/10/24 Python