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实现一次创建多级目录的方法
May 15 Python
python+requests+unittest API接口测试实例(详解)
Jun 10 Python
详解Python中for循环是如何工作的
Jun 30 Python
django 外键model的互相读取方法
Dec 15 Python
利用python实现AR教程
Nov 20 Python
使用python写一个自动浏览文章的脚本实例
Dec 05 Python
使用Python将Exception异常错误堆栈信息写入日志文件
Apr 08 Python
python 实现 hive中类似 lateral view explode的功能示例
May 18 Python
Windows下pycharm安装第三方库失败(通用解决方案)
Sep 17 Python
python如何调用百度识图api
Sep 29 Python
如何一键升级Python所有包
Nov 05 Python
Python就将所有的英文单词首字母变成大写
Feb 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
用PHP实现登陆验证码(类似条行码状)
2006/10/09 PHP
图形数字验证代码
2006/10/09 PHP
PHP 彩色文字实现代码
2009/06/29 PHP
php数字转汉字代码(算法)
2011/10/08 PHP
php二分查找二种实现示例
2014/03/12 PHP
php集成套件服务器xampp安装使用教程(适合第一次玩PHP的新手)
2015/06/03 PHP
PHP常用函数总结(180多个)
2016/12/25 PHP
thinkPHP5 ACL用户权限模块用法详解
2017/05/10 PHP
疯掉了,尽然有js写的操作系统
2007/04/23 Javascript
jQuery+CSS实现菜单滑动伸展收缩(仿淘宝)
2013/03/22 Javascript
非常好用的JsonToString 方法 简单实例
2013/07/18 Javascript
js实现点击图片将图片地址复制到粘贴板的方法
2015/02/16 Javascript
JavaScript使用cookie记录临时访客信息的方法
2015/04/07 Javascript
jquery插件tytabs.jquery.min.js实现渐变TAB选项卡效果
2015/08/25 Javascript
学习使用jquery iScroll.js移动端滚动条插件
2020/03/24 Javascript
jquery checkbox无法用attr()二次勾选问题的解决方法
2016/07/22 Javascript
对Angular.js Controller如何进行单元测试
2016/10/25 Javascript
vue-cli如何快速构建vue项目
2017/04/26 Javascript
详解vue-cli中配置sass
2017/06/21 Javascript
搭建element-ui的Vue前端工程操作实例
2018/02/23 Javascript
微信小程序vant弹窗组件的实现方式
2020/02/21 Javascript
[03:16]DOTA2完美大师赛主赛事首日集锦
2017/11/23 DOTA
python使用正则表达式替换匹配成功的组
2017/11/17 Python
python爬取个性签名的方法
2018/06/17 Python
Python3 pip3 list 出现 DEPRECATION 警告的解决方法
2019/02/16 Python
python 通过可变参数计算n个数的乘积方法
2019/06/13 Python
pytorch sampler对数据进行采样的实现
2019/12/31 Python
python IDLE添加行号显示教程
2020/04/25 Python
3种方式实现瀑布流布局小结
2019/09/05 HTML / CSS
新西兰最大的品牌运动鞋购物网站:Platypus NZ
2017/10/27 全球购物
New Balance德国官方网站:购买鞋子和服装
2019/08/31 全球购物
意大利辅助药品、药物和补品在线销售:FarmaEurope
2020/04/29 全球购物
应届毕业生就业自荐信
2013/10/26 职场文书
国旗下的演讲稿
2014/05/08 职场文书
民主评议政风行风活动心得体会
2014/10/29 职场文书
幼师自荐信范文
2015/03/06 职场文书