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监控网站运行异常并发送邮件的方法
Mar 13 Python
Python正则替换字符串函数re.sub用法示例
Jan 19 Python
Python yield 使用方法浅析
May 20 Python
更新修改后的Python模块方法
Mar 03 Python
python实现合并两个排序的链表
Mar 03 Python
python PyAutoGUI 模拟鼠标键盘操作和截屏功能
Aug 04 Python
浅谈django2.0 ForeignKey参数的变化
Aug 06 Python
python多线程同步实例教程
Aug 11 Python
pytorch中的上采样以及各种反操作,求逆操作详解
Jan 03 Python
2021年的Python 时间轴和即将推出的功能详解
Jul 27 Python
Python pickle模块常用方法代码实例
Oct 10 Python
python读取pdf格式文档的实现代码
Apr 01 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
3
2006/10/09 PHP
PHP面向对象五大原则之单一职责原则(SRP)详解
2018/04/04 PHP
php写入文件不覆盖的实例讲解
2019/09/17 PHP
JQuery选择器特辑 详细小结
2012/05/14 Javascript
jQuery使用一个按钮控制图片的伸缩实现思路
2013/04/19 Javascript
解决js下referer兼容各大浏览器的方法
2014/11/03 Javascript
在HTML中插入JavaScript代码的示例
2015/06/03 Javascript
理解JavaScript表单的基础知识
2016/01/25 Javascript
jquery实现具有嵌套功能的选项卡
2016/02/12 Javascript
Sea.JS知识总结
2016/05/05 Javascript
移动端H5开发 Turn.js实现很棒的翻书效果
2016/06/20 Javascript
移动端触摸滑动插件swiper使用方法详解
2017/08/11 Javascript
如何理解Vue的render函数的具体用法
2017/08/30 Javascript
发布订阅模式在vue中的实际运用实例详解
2019/06/09 Javascript
微信小程序 函数防抖 解决重复点击消耗性能问题实现代码
2019/09/12 Javascript
[46:48]DOTA2上海特级锦标赛A组小组赛#2 Secret VS CDEC第三局
2016/02/25 DOTA
Python读写Redis数据库操作示例
2014/03/18 Python
Python enumerate函数功能与用法示例
2019/03/01 Python
Python求两点之间的直线距离(2种实现方法)
2019/07/07 Python
python取均匀不重复的随机数方式
2019/11/27 Python
PyQt5+python3+pycharm开发环境配置教程
2020/03/24 Python
python rsa-oaep加密的示例代码
2020/09/23 Python
德国内衣、泳装和睡衣网上商店:Bigsize Dessous
2018/07/09 全球购物
什么是符号链接,什么是硬链接?符号链接与硬链接的区别是什么?
2013/05/03 面试题
如何填写个人简历自我评价
2013/12/10 职场文书
车祸赔偿收入证明
2014/01/09 职场文书
大学生职业生涯规划书汇总
2014/03/20 职场文书
计算机求职自荐信范文
2014/04/19 职场文书
竞聘上岗演讲
2014/05/19 职场文书
2014年国庆标语
2014/06/30 职场文书
施工安全汇报材料
2014/08/17 职场文书
领导个人查摆剖析材料
2014/10/29 职场文书
《狼牙山五壮士》教学反思
2016/02/17 职场文书
Python中使用Lambda函数的5种用法
2021/04/01 Python
Python 多线程之threading 模块的使用
2021/04/14 Python
go 原生http web 服务跨域restful api的写法介绍
2021/04/27 Golang