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实现设置windows桌面壁纸代码分享
Mar 28 Python
使用Protocol Buffers的C语言拓展提速Python程序的示例
Apr 16 Python
详解duck typing鸭子类型程序设计与Python的实现示例
Jun 03 Python
Python原始字符串与Unicode字符串操作符用法实例分析
Jul 22 Python
python实现电脑自动关机
Jun 20 Python
Python3 Post登录并且保存cookie登录其他页面的方法
Dec 28 Python
值得收藏的10道python 面试题
Apr 15 Python
利用PyCharm Profile分析异步爬虫效率详解
May 08 Python
一篇文章彻底搞懂Python中可迭代(Iterable)、迭代器(Iterator)与生成器(Generator)的概念
May 13 Python
Python Pandas实现数据分组求平均值并填充nan的示例
Jul 04 Python
python根据用户需求输入想爬取的内容及页数爬取图片方法详解
Aug 03 Python
Python爬虫网络请求之代理服务器和动态Cookies
Apr 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检测用户当前使用的浏览器是否为IE浏览器
2013/12/03 PHP
zf框架db类的分页示例分享
2014/03/14 PHP
PHP防止sql注入小技巧之sql预处理原理与实现方法分析
2019/12/13 PHP
discuz论坛更换域名,详细文件修改步骤
2020/12/09 PHP
用apply让javascript函数仅执行一次的代码
2010/06/27 Javascript
JQuery优缺点分析说明
2011/04/10 Javascript
JS,Jquery获取select,dropdownlist,checkbox下拉列表框的值(示例代码)
2014/01/11 Javascript
简介JavaScript中strike()方法的使用
2015/06/08 Javascript
JavaScript设计模式经典之工厂模式
2016/02/24 Javascript
JS实现表单验证功能(验证手机号是否存在,验证码倒计时)
2016/10/11 Javascript
AngularJS extend用法详解及实例代码
2016/11/15 Javascript
基于Vue2.0的分页组件
2017/03/16 Javascript
jquery操作ul的一些操作笔记整理(干货)
2017/08/31 jQuery
jQuery图片加载失败替换默认图片方法汇总
2017/11/29 jQuery
php中and 和 &&出坑指南
2018/07/13 Javascript
基于D3.js实现时钟效果
2018/07/17 Javascript
微信jssdk逻辑在vue中的运用详解
2018/11/14 Javascript
实用的Vue开发技巧
2019/05/30 Javascript
maptalks+three.js+vue webpack实现二维地图上贴三维模型操作
2020/08/10 Javascript
JSONObject与JSONArray使用方法解析
2020/09/28 Javascript
Vue组件生命周期运行原理解析
2020/11/25 Vue.js
八大排序算法的Python实现
2021/01/28 Python
Django中使用Celery的教程详解
2018/08/24 Python
利用PyCharm Profile分析异步爬虫效率详解
2019/05/08 Python
python的pytest框架之命令行参数详解(上)
2019/06/27 Python
Python操作qml对象过程详解
2019/09/26 Python
Philosophy美国官网:美国美容品牌
2016/08/15 全球购物
一家专门经营包包的英国网站:MyBag
2019/09/08 全球购物
公司人力资源的自我评价
2014/01/02 职场文书
公司成本主管岗位责任制
2014/02/21 职场文书
中级会计大学生职业生涯规划书
2014/09/16 职场文书
2015年幼儿园国庆节活动总结
2015/07/30 职场文书
HTML常用标签超详细整理
2022/03/19 HTML / CSS
宫崎骏十大动画电影,宫崎骏好看的动画电影排名
2022/03/22 日漫
MySQL详解进行JDBC编程与增删改查方法
2022/06/16 MySQL
前端传参数进行Mybatis调用mysql存储过程执行返回值详解
2022/08/14 MySQL