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 17 Python
Python性能提升之延迟初始化
Dec 04 Python
python 自定义异常和异常捕捉的方法
Oct 18 Python
解决.ui文件生成的.py文件运行不出现界面的方法
Jun 19 Python
简单了解python 生成器 列表推导式 生成器表达式
Aug 22 Python
Python实现基于socket的udp传输与接收功能详解
Nov 15 Python
如何给Python代码进行加密
Jan 10 Python
python+selenium定时爬取丁香园的新型冠状病毒数据并制作出类似的地图(部署到云服务器)
Feb 09 Python
python实现测试工具(一)——命令行发送get请求
Oct 19 Python
python实现登录与注册系统
Nov 30 Python
python工具快速为音视频自动生成字幕(使用说明)
Jan 27 Python
python利用opencv实现颜色检测
Feb 23 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数组函数序列之prev() - 移动数组内部指针到上一个元素的位置,并返回该元素值
2011/10/31 PHP
IIS6.0 开启Gzip方法及PHP Gzip函数分享
2014/06/08 PHP
async和DOM Script文件加载比较
2014/07/20 PHP
使用YII2框架实现微信公众号中表单提交功能
2017/09/04 PHP
jquery 查找select ,并触发事件的实现代码
2011/03/30 Javascript
JavaScript之编码规范 推荐
2012/05/23 Javascript
在javascript中关于节点内容加强
2013/04/11 Javascript
js弹出层(jQuery插件形式附带reLoad功能)
2013/04/12 Javascript
jquery判断RadioButtonList和RadioButton中是否有选中项示例
2013/09/29 Javascript
jquery为页面增加快捷键示例
2014/01/31 Javascript
jquery.ajax的url中传递中文乱码问题的解决方法
2014/02/07 Javascript
js实现仿微博滚动显示信息的效果
2015/12/21 Javascript
WordPress中利用AJAX技术进行评论提交的实现示例
2016/01/12 Javascript
js计算时间差代码【包括计算,天,时,分,秒】
2016/04/26 Javascript
JavaScript 链式结构序列化详解
2016/09/30 Javascript
微信小程序 实战小程序实例
2016/10/08 Javascript
JS实现的驼峰式和连字符式转换功能分析
2016/12/21 Javascript
详解ES6之用let声明变量以及let loop机制
2017/07/15 Javascript
浅谈ES6 模板字符串的具体使用方法
2017/11/07 Javascript
微信小程序slider组件使用详解
2018/01/31 Javascript
以视频爬取实例讲解Python爬虫神器Beautiful Soup用法
2016/01/20 Python
Python使用gensim计算文档相似性
2016/04/10 Python
kafka-python批量发送数据的实例
2018/12/27 Python
Python 监测文件是否更新的方法
2019/06/10 Python
使用Tensorflow将自己的数据分割成batch训练实例
2020/01/20 Python
Python docutils文档编译过程方法解析
2020/06/23 Python
Python文件夹批处理操作代码实例
2020/07/21 Python
如何在mac版pycharm选择python版本
2020/07/21 Python
全球最大的中文旅行网站:去哪儿网
2017/11/16 全球购物
台湾时尚彩瞳专门店:imeime
2019/08/16 全球购物
国际贸易专业个人求职信范文分享
2013/12/14 职场文书
《蝙蝠和雷达》教学反思
2014/04/23 职场文书
体育课外活动总结
2014/07/08 职场文书
出差报告格式模板
2014/11/06 职场文书
小数乘法教学反思
2016/02/22 职场文书
spring cloud 配置中心客户端启动遇到的问题
2021/09/25 Java/Android