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中的in ,not in来检查元素是不是在列表中的方法
Jul 06 Python
详解python如何在django中为用户模型添加自定义权限
Oct 15 Python
对python读取zip压缩文件里面的csv数据实例详解
Feb 08 Python
python的依赖管理的实现
May 14 Python
Django框架会话技术实例分析【Cookie与Session】
May 24 Python
python 实现在tkinter中动态显示label图片的方法
Jun 13 Python
python区分不同数据类型的方法
Oct 14 Python
wxPython实现画图板
Aug 27 Python
python爬虫模拟浏览器的两种方法实例分析
Dec 09 Python
Python和Bash结合在一起的方法
Nov 13 Python
Python 实现RSA加解密文本文件
Dec 30 Python
python使用pymysql模块操作MySQL
Jun 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
php ckeditor上传图片文件名乱码解决方法
2013/11/15 PHP
QQ邮箱的一个文本编辑器代码
2007/03/14 Javascript
网上应用的一个不错common.js脚本
2007/08/08 Javascript
jquery实现居中弹出层代码
2010/08/25 Javascript
jquery1.83 之前所有与异步列队相关的模块详细介绍
2012/11/13 Javascript
关于JavaScript的面向对象和继承有利新手学习
2013/01/11 Javascript
javascript搜索框效果实现方法
2015/05/14 Javascript
深入讲解AngularJS中的自定义指令的使用
2015/06/18 Javascript
javascript 用函数实现继承详解
2016/05/28 Javascript
JQuery EasyUI学习教程之datagrid 添加、修改、删除操作
2016/07/09 Javascript
Vue.js一个文件对应一个组件实践
2016/10/27 Javascript
jquery中$.fn和图片滚动效果实现的必备知识总结
2017/04/21 jQuery
jQuery实现滚动效果
2017/11/17 jQuery
React通过redux-persist持久化数据存储的方法示例
2019/02/14 Javascript
小程序分享模块超级详解(推荐)
2019/04/10 Javascript
微信小程序 动态修改页面数据及参数传递过程详解
2019/09/27 Javascript
jQuery实现图片随机切换、抽奖功能(实例代码)
2019/10/23 jQuery
JS实现选项卡插件的两种写法(jQuery和class)
2020/12/30 jQuery
[50:54]完美世界DOTA2联赛 GXR vs IO 第三场 11.07
2020/11/10 DOTA
python批量下载图片的三种方法
2013/04/22 Python
Linux CentOS Python开发环境搭建教程
2018/11/28 Python
python tkinter组件摆放方式详解
2019/09/16 Python
使用Fabric自动化部署Django项目的实现
2019/09/27 Python
python 牛顿法实现逻辑回归(Logistic Regression)
2020/10/15 Python
接口自动化多层嵌套json数据处理代码实例
2020/11/20 Python
自荐书模板
2013/12/19 职场文书
公司培训欢迎词
2014/01/10 职场文书
2014年教师节国旗下讲话稿
2014/09/10 职场文书
无财产无子女离婚协议书范文
2014/09/14 职场文书
机关作风建设工作总结
2014/10/23 职场文书
感谢信格式范文
2015/01/22 职场文书
校友回访母校寄语
2015/02/26 职场文书
英语辞职信范文
2015/02/28 职场文书
总经理司机岗位职责
2015/04/10 职场文书
公司欠款证明
2015/06/24 职场文书
初一英语教学反思
2016/02/15 职场文书