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抓取最新博客内容并生成Rss
May 17 Python
python实现简单socket通信的方法
Apr 19 Python
Python嵌套列表转一维的方法(压平嵌套列表)
Jul 03 Python
Python中__slots__属性介绍与基本使用方法
Sep 05 Python
对Pyhon实现静态变量全局变量的方法详解
Jan 11 Python
django 自定义过滤器的实现
Feb 26 Python
django-rest-framework解析请求参数过程详解
Jul 18 Python
python 利用已有Ner模型进行数据清洗合并代码
Dec 24 Python
python 实现线程之间的通信示例
Feb 14 Python
解决Python logging模块无法正常输出日志的问题
Feb 21 Python
JupyterNotebook 输出窗口的显示效果调整实现
Sep 22 Python
用Python进行websocket接口测试
Oct 16 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
调频问题解答
2021/03/01 无线电
PHP 一个随机字符串生成代码
2010/05/26 PHP
php入门之连接mysql数据库的一个类
2012/04/21 PHP
实现PHP多线程异步请求的3种方法
2014/01/17 PHP
一款简单实用的php操作mysql数据库类
2014/12/08 PHP
详解PHP中的Traits
2015/07/29 PHP
thinkphp5.1 文件引入路径问题及注意事项
2018/06/13 PHP
PHP删除数组中指定值的元素常用方法实例分析【4种方法】
2018/08/21 PHP
jquery ui resizable bug解决方法
2010/10/26 Javascript
Javascript中设置默认参数值示例
2014/09/11 Javascript
Immutable 在 JavaScript 中的应用
2016/05/02 Javascript
js改变css样式的三种方法推荐
2016/06/28 Javascript
详解vue服务端渲染(SSR)初探
2017/06/19 Javascript
vue实现选项卡及选项卡切换效果
2018/04/24 Javascript
JavaScript设计模式之工厂模式和抽象工厂模式定义与用法分析
2018/07/26 Javascript
vue-cli构建vue项目的步骤详解
2019/01/27 Javascript
vue-froala-wysiwyg 富文本编辑器功能
2019/09/19 Javascript
JavaScript数组排序的六种常见算法总结
2020/08/18 Javascript
elementUI同一页面展示多个Dialog的实现
2020/11/19 Javascript
python实现发送邮件及附件功能
2021/03/02 Python
Python进阶之全面解读高级特性之切片
2019/02/19 Python
python根据多个文件名批量查找文件
2019/08/13 Python
Python如何实现动态数组
2019/11/02 Python
Linux下升级安装python3.8并配置pip及yum的教程
2020/01/02 Python
Python flask框架端口失效解决方案
2020/06/04 Python
卸载tensorflow-cpu重装tensorflow-gpu操作
2020/06/23 Python
浅谈基于Canvas的手绘风格图形库Rough.js
2018/03/19 HTML / CSS
美国办公用品折扣网站:Shoplet.com
2019/11/24 全球购物
C语言怎样定义和声明全局变量和函数最好
2013/11/26 面试题
简历中自我评价怎么写
2014/02/12 职场文书
英文求职信写作小建议
2014/02/16 职场文书
高一学生评语大全
2014/04/25 职场文书
教师年度考核评语
2014/04/28 职场文书
利用ajax+php实现商品价格计算
2021/03/31 PHP
比较几种Redis集群方案
2021/06/21 Redis
Springboot集成阿里云OSS上传文件系统教程
2021/06/28 Java/Android