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实现从脚本里运行scrapy的方法
Apr 07 Python
Python实现对PPT文件进行截图操作的方法
Apr 28 Python
python中zip和unzip数据的方法
May 27 Python
Python实现将目录中TXT合并成一个大TXT文件的方法
Jul 15 Python
tensorflow使用神经网络实现mnist分类
Sep 08 Python
python实现的MySQL增删改查操作实例小结
Dec 19 Python
Python3中urlencode和urldecode的用法详解
Jul 23 Python
python 计算两个列表的相关系数的实现
Aug 29 Python
Python多线程及其基本使用方法实例分析
Oct 29 Python
解决Python中回文数和质数的问题
Nov 24 Python
Pycharm配置autopep8实现流程解析
Nov 28 Python
Python Flask实现进度条
May 11 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
基于AppServ,XAMPP,WAMP配置php.ini去掉警告信息(NOTICE)的方法详解
2013/05/07 PHP
Linux Apache PHP Oracle 安装配置(具体操作步骤)
2013/06/17 PHP
PHP使用PDO操作数据库的乱码问题解决方法
2016/04/08 PHP
PHP实现的多文件上传类及用法示例
2016/05/06 PHP
PHP-FPM运行状态的实时查看及监控详解
2016/11/18 PHP
Jquery Ajax学习实例5 向WebService发出请求,返回泛型集合数据的异步调用
2010/03/17 Javascript
判断目标是否是window,document,和拥有tagName的Element的代码
2010/05/31 Javascript
获取客户端电脑日期时间js代码(jquery)
2012/09/12 Javascript
jquery 设置style:display的方法
2015/01/29 Javascript
VueJS全面解析
2016/11/10 Javascript
jQuery使用Layer弹出层插件闪退问题
2016/12/22 Javascript
NodeJS处理Express中异步错误
2017/03/26 NodeJs
微信小程序实现添加手机联系人功能示例
2017/11/30 Javascript
vue.js 实现点击按钮动态添加li的方法
2018/09/07 Javascript
Nuxt.js SSR与权限验证的实现
2018/11/21 Javascript
vue 左滑删除功能的示例代码
2019/01/28 Javascript
详解Vue.js和layui日期控件冲突问题解决办法
2019/07/25 Javascript
layui2.0使用table+laypage实现真分页
2019/07/27 Javascript
Vue自定义表单内容检查rules实例
2020/10/30 Javascript
Python 变量类型及命名规则介绍
2013/06/08 Python
Python通过正则表达式选取callback的方法
2015/07/18 Python
Python实现命令行通讯录实例教程
2016/08/18 Python
淘宝秒杀python脚本 扫码登录版
2019/09/19 Python
windows支持哪个版本的python
2020/07/03 Python
详解Python 最短匹配模式
2020/07/29 Python
森海塞尔美国官网:Sennheiser耳机与耳麦
2017/07/19 全球购物
Interhome丹麦:在线预订度假屋和公寓
2019/07/18 全球购物
俄罗斯EPL钻石珠宝店:ЭПЛ
2019/10/22 全球购物
初中学校对照检查材料
2014/08/19 职场文书
研修心得体会
2014/09/04 职场文书
2014年宣传部工作总结
2014/11/12 职场文书
2014年控辍保学工作总结
2014/12/08 职场文书
奖励通知
2015/04/22 职场文书
导游词之凤凰古城
2019/10/22 职场文书
用python自动生成日历
2021/04/24 Python
Python学习之迭代器详解
2022/04/01 Python