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 相关文章推荐
python3.3教程之模拟百度登陆代码分享
Jan 16 Python
全面了解python字符串和字典
Jul 07 Python
详解 Python中LEGB和闭包及装饰器
Aug 03 Python
python实现画圆功能
Jan 25 Python
python实现一个简单的ping工具方法
Jan 31 Python
python flask解析json数据不完整的解决方法
May 26 Python
Python从list类型、range()序列简单认识类(class)【可迭代】
May 31 Python
python 基于TCP协议的套接字编程详解
Jun 29 Python
通过Python编写一个简单登录功能过程解析
Sep 04 Python
如何获取Python简单for循环索引
Nov 21 Python
python实现在列表中查找某个元素的下标示例
Nov 16 Python
Pyhton爬虫知识之正则表达式详解
Apr 01 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
基于initPHP的框架介绍
2013/04/18 PHP
Thinkphp结合AJAX长轮询实现PC与APP推送详解
2017/07/31 PHP
Laravel Eloquent ORM 实现查询表中指定的字段
2019/10/17 PHP
解决php用mysql方式连接数据库出现Deprecated报错问题
2019/12/25 PHP
javaScript parseInt字符转化为数字函数使用小结
2009/11/05 Javascript
js 判断一个元素是否在页面中存在
2012/12/27 Javascript
JS图片无缝滚动(简单利于使用)
2013/06/17 Javascript
jquery的ajax简单结构示例代码
2014/02/17 Javascript
利用原生JavaScript获取元素样式只是获取而已
2014/10/08 Javascript
avalon js实现仿微博拖动图片排序
2015/08/14 Javascript
jquery自定义右键菜单、全选、不连续选择
2016/03/01 Javascript
详解基于webpack搭建react运行环境
2017/06/01 Javascript
vue项目实现表单登录页保存账号和密码到cookie功能
2018/08/31 Javascript
解决js相同的正则多次调用test()返回的值却不同的问题
2018/10/10 Javascript
Vue项目打包部署到iis服务器的配置方法
2019/10/14 Javascript
vue 根据选择条件显示指定参数的例子
2019/11/09 Javascript
《javascript设计模式》学习笔记五:Javascript面向对象程序设计工厂模式实例分析
2020/04/08 Javascript
element中el-container容器与div布局区分详解
2020/05/13 Javascript
[02:40]DOTA2英雄基础教程 炼金术士
2013/12/23 DOTA
python解释器spython使用及原理解析
2019/08/24 Python
python对XML文件的操作实现代码
2020/03/27 Python
在html5的Canvas上绘制椭圆的几种方法总结
2013/01/07 HTML / CSS
Myprotein瑞士官方网站:运动营养和健身网上商店
2019/09/25 全球购物
美国校服网上商店:French Toast
2019/10/08 全球购物
迪卡侬(Decathlon)加拿大官网:源自法国的运动专业超市
2020/11/22 全球购物
TUMI香港官网:国际领先的行李箱、背囊品牌
2021/03/01 全球购物
国际贸易专业个人职业生涯规划
2014/02/15 职场文书
请假条标准格式规范
2014/04/10 职场文书
电子信息工程专业自荐书
2014/06/24 职场文书
2015年党风廉政承诺书
2015/01/22 职场文书
党支部评议意见
2015/06/02 职场文书
热血教师观后感
2015/06/10 职场文书
医疗纠纷调解协议书
2015/08/06 职场文书
热爱劳动主题班会
2015/08/14 职场文书
python geopandas读取、创建shapefile文件的方法
2021/06/29 Python
Redis调用Lua脚本及使用场景快速掌握
2022/03/16 Redis