我们都有过函数调用的经历,那么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调用程序call_call在Python中改进数列的实例讲解相关推荐

  1. python if else 嵌套格式_python中if嵌套命令实例讲解

    一.嵌套命令计算机执行的顺序 缩进相同的命令处于同一个等级,第一步,计算机就要按顺序一条一条地执行命令. 1.先给score赋值: 2.因为if和else是只能留一个的互斥关系,if和else下的代码 ...

  2. excel调用python编程-使用Python和xlwt向Excel文件中写入中文的实例

    sheet1.write(row_num,0,f) row_num = 1 book.save('demo.xls') 程序执行结果如下: grey@DESKTOP-3T80NPQ:/mnt/e/01 ...

  3. python调用everything批量查找表格中的文件名在磁盘中是否存在

    python调用everything批量查找表格中的文件名在磁盘中是否存在 介绍 Everything 配置 使用openpyxl读写文件 读文件 写文件 BeautifulSoup的使用 创建 be ...

  4. python的empty函数_python中numpy.empty()函数实例讲解

    在使用python编程的过程中,想要快速的创建ndarray数组,可以使用numpy.empty()函数.numpy.empty()函数所创建的数组内所有元素均为空,没有实际意义,所以它也是创建数组最 ...

  5. php simplexml_load_file 详解,php中simplexml_load_file函数用法实例讲解

    php中simplexml_load_file函数用法实例讲解 发布于 2015-02-07 06:53:40 | 136 次阅读 | 评论: 0 | 来源: 网友投递 PHP开源脚本语言PHP(外文 ...

  6. python调用shell命令-在Python中执行shell命令的6种方法,你都知道吗?

    原标题:在Python中执行shell命令的6种方法,你都知道吗? Python经常被称作"胶水语言",因为它能够轻易地操作其他程序,轻易地包装使用其他语言编写的库.今天我们就讲解 ...

  7. python调用shell命令-「Python」6种python中执行shell命令方法

    用Python调用Shell命令有如下几种方式: 第一种: os.system("The command you want"). 这个调用相当直接,且是同步进行的,程序需要阻塞并等 ...

  8. python调用程序call_Python下的subprocess.call()使用和注意事项

    Python虽然有许多优秀的第三方库,但在实际使用的时候免不了使用一些cmd调用的程序,毕竟这类程序比较底层,更快.也更稳定.比如GDAL.FFmpeg. ImageMagick等. 利用Python ...

  9. python调用c++动态库 linux_linux中使用boost.python调用c++动态库的方法

    前言 最近开始使用 robot framework 测试c++的动态库,robot framework 是跑在 windows 上面,c++动态库是跑在远程linux主机上面.测试办法是让 robot ...

最新文章

  1. 有没有一只蜻蜓永远为你守候?
  2. Linux C编程--临时文件
  3. SAP企业解决方案SAP Business One敏捷系列—敏捷制造
  4. Java编程入门100例之二十二(字符串查找)
  5. (11) ejb学习: Jpa事务管理类型 container 和 bean
  6. java)_Java NIO系列教程(一) Java NIO 概述
  7. 关于STM32 IAP
  8. 数据库管理工具 Navicat使用教程:在SQL Server上监视什么(第1部分)
  9. 理解Docker(1):Docker 安装和基础用法
  10. 解读absolute与relative(转载)
  11. [Error] expected primary-expression before '' token是什么意思
  12. [译]基于Vue JS, Webpack 以及Material Design的渐进式web应用 [Part 1]
  13. 巴菲特私生活曝光:养两个老婆、生活不能自理。每次暴跌都是财富上台阶的天赐良机!...
  14. python学习记录--转义字符 字符串 特殊参数
  15. 计算机毕设Python+Vue音乐鉴赏网站前端开发(程序+LW+部署)
  16. 【JavaSE】多态数组的使用
  17. MySQL 的查询优化
  18. 关于Latex中pdf和eps图片的处理
  19. 国务院办公厅关于2014年部分节假日安排的通知
  20. 程序的指令和数据为什么分开存放?

热门文章

  1. fullpage常用配置
  2. 计算机代码清单目录,(程序源代码清单.doc
  3. 在linux centos 7上安装maven
  4. 【2020-06-16】CentOS8下yum安装nginx,systemctl start nginx报错undefined symbol: FT_Done_MM_Var
  5. android动画之布局动画,Android动画--布局动画 LayoutAnimation
  6. java统计大串中小串的出现次数_统计大串中小串出现的次数
  7. python operator 多属性排序_快速入门Python必备的基础知识
  8. 集成运算放大电路实验报告_模电总结:第三章、集成运算放大电路
  9. 【快速入门Linux】2_Linux命令—基本使用
  10. vscode 崩溃_太真实了!程序员崩溃的40个瞬间