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中的集合类型知识讲解
Aug 19 Python
简单总结Python中序列与字典的相同和不同之处
Jan 19 Python
Python制作简易注册登录系统
Dec 15 Python
python中字符串类型json操作的注意事项
May 02 Python
python与sqlite3实现解密chrome cookie实例代码
Jan 20 Python
python SMTP实现发送带附件电子邮件
May 22 Python
pytorch中nn.Conv1d的用法详解
Dec 31 Python
python 将dicom图片转换成jpg图片的实例
Jan 13 Python
python3 Scrapy爬虫框架ip代理配置的方法
Jan 17 Python
Django 自定义404 500等错误页面的实现
Mar 08 Python
python操作链表的示例代码
Sep 27 Python
python数字图像处理之对比度与亮度调整示例
Jun 28 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版(4)
2006/10/09 PHP
php 输出json及显示json中的中文汉字详解及实例
2016/11/09 PHP
Laravel学习教程之request validation的编写
2017/10/25 PHP
关于IFRAME 自适应高度的研究
2006/07/20 Javascript
IE和Firefox下event事件杂谈
2009/12/18 Javascript
JavaScript游戏之是男人就下100层代码打包
2010/11/08 Javascript
基于jquery的仿百度搜索框效果代码
2011/04/11 Javascript
web css实现整站样式互相切换
2013/10/29 Javascript
基于jQuery实现网页进度显示插件
2015/03/04 Javascript
JavaScript 输出显示内容(document.write、alert、innerHTML、console.log)
2016/12/14 Javascript
深入理解Webpack 中路径的配置
2017/06/17 Javascript
JavaScript中最常用的10种代码简写技巧总结
2017/06/28 Javascript
javascript实现文字无缝滚动效果
2017/08/26 Javascript
vue文件树组件使用详解
2018/03/29 Javascript
Vue Autocomplete 自动完成功能简单示例
2019/05/25 Javascript
vue axios post发送复杂对象问题
2019/06/04 Javascript
python抓取网页图片并放到指定文件夹
2014/04/24 Python
Python实现把utf-8格式的文件转换成gbk格式的文件
2015/01/22 Python
在Python的Django框架中生成CSV文件的方法
2015/07/22 Python
Python实现的在特定目录下导入模块功能分析
2019/02/11 Python
Python脚本按照当前日期创建多级目录
2019/03/01 Python
Python requests.post方法中data与json参数区别详解
2020/04/30 Python
python编写softmax函数、交叉熵函数实例
2020/06/11 Python
python如何将图片转换素描画
2020/09/08 Python
HTML5视频支持检测(检查浏览器是否支持视频播放)
2013/06/08 HTML / CSS
HTML5使用drawImage()方法绘制图像
2014/06/23 HTML / CSS
HTML5拖放效果的实现代码
2016/11/17 HTML / CSS
移动端html5模拟长按事件的实现方法
2018/09/30 HTML / CSS
医科大学生的自我评价
2013/12/04 职场文书
管理学专业个人求职信范文
2013/12/13 职场文书
教师绩效考核方案
2014/01/21 职场文书
教学个人的自我评价分享
2014/02/16 职场文书
酒店端午节活动方案
2014/08/26 职场文书
2015年电话客服工作总结
2015/05/18 职场文书
医者仁心观后感
2015/06/17 职场文书
python字符串的一些常见实用操作
2022/04/06 Python