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实现的飞速中文网小说下载脚本
Apr 23 Python
深入解析Python中的变量和赋值运算符
Oct 12 Python
编写Python爬虫抓取暴走漫画上gif图片的实例分享
Apr 20 Python
Python 使用with上下文实现计时功能
Mar 09 Python
基于Django URL传参 FORM表单传数据 get post的用法实例
May 28 Python
python traceback捕获并打印异常的方法
Aug 31 Python
python使用xlrd模块读取xlsx文件中的ip方法
Jan 11 Python
PyTorch中Tensor的拼接与拆分的实现
Aug 18 Python
Python操作Sqlite正确实现方法解析
Feb 05 Python
如何在django中实现分页功能
Apr 22 Python
Python必须了解的35个关键词
Jul 16 Python
总结Python常用的魔法方法
May 25 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
PHP程序开发范例学习之表单 获取文本框的值
2011/08/08 PHP
PHP弱类型语言中类型判断操作实例详解
2017/08/10 PHP
Laravel 模型使用软删除-左连接查询-表起别名示例
2019/10/24 PHP
js 实现复制到粘贴板的功能代码
2010/05/13 Javascript
JS添加删除一组文本框并对输入信息加以验证判断其正确性
2013/04/11 Javascript
JS实现定时页面弹出类似QQ新闻的提示框
2013/11/07 Javascript
node.js中的dns.getServers方法使用说明
2014/12/08 Javascript
jQuery实现的给图片点赞+1动画效果(附在线演示及demo源码下载)
2015/12/31 Javascript
原生javascript实现解析XML文档与字符串
2016/03/01 Javascript
seajs模块之间依赖的加载以及模块的执行
2016/10/21 Javascript
JavaScript中匿名函数的递归调用
2017/01/22 Javascript
Vue 中批量下载文件并打包的示例代码
2017/11/20 Javascript
深入浅出webpack之externals的使用
2017/12/04 Javascript
js指定日期增加指定月份的实现方法
2018/12/19 Javascript
jQuery实现的记住帐号密码功能完整示例
2019/08/03 jQuery
vue给对象动态添加属性和值的实例
2019/09/09 Javascript
layui的select联动实现代码
2019/09/28 Javascript
Vue组件通信中非父子组件传值知识点总结
2019/12/05 Javascript
[46:43]DOTA2上海特级锦标赛主赛事日 - 1 胜者组第一轮#2LGD VS MVP.Phx第二局
2016/03/02 DOTA
利用pandas进行大文件计数处理的方法
2018/07/25 Python
python实现遍历文件夹修改文件后缀
2018/08/28 Python
让你Python到很爽的加速递归函数的装饰器
2019/05/26 Python
python提取xml里面的链接源码详解
2019/10/15 Python
keras 回调函数Callbacks 断点ModelCheckpoint教程
2020/06/18 Python
Python通过Schema实现数据验证方式
2020/11/12 Python
C/C++程序员常见面试题一
2012/12/08 面试题
公司司机岗位职责范本
2014/03/03 职场文书
服务标兵事迹材料
2014/05/04 职场文书
大学生迟到检讨书500字
2014/10/17 职场文书
医院财务人员岗位职责
2015/04/14 职场文书
培训简讯范文
2015/07/20 职场文书
体育教师研修感悟
2015/11/18 职场文书
CSS 使用 resize 实现图片拖拽切换预览功能(强大功能)
2021/08/23 HTML / CSS
python pygame 开发五子棋双人对弈
2022/05/02 Python
聊聊CSS粘性定位sticky案例解析
2022/06/01 HTML / CSS