- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章call在Python中改进数列的实例讲解由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
我们都有过函数调用的经历,那么call调用类实例的过程就跟函数很相似。类的用法很多人都知道了,类实例又是什么呢?可以把类看成一个设计图,类实例就是设计出的成品。现在我们弄清楚了call调用对象的概念,就可以进一步用来在python中改进数组,想学的小伙伴一起往下看吧.
__call__() 。
Python里,函数式first-class对象,这表示,函数可以被传递给另外的函数或者方法,可以从子程序里返回,可以赋给变量.
类的实例也可以像函数一样被对待,比如将他们传递给其他的函数或者方法,并且被调用。想要达到这个目的,就要在类里专门定义__call__()方法.
def __call__(self, [args ...]) 它接受一系列参数。假设x是类X的一个实例 , x.__call__(1, 2) 就等价于调用x(1,2),而实例x仿佛就是一个函数.
改进一下斐波那契数列:
1
|
class
Fib(
object
):
|
请加一个__call__方法,让调用更简单:
1
2
3
|
>>> f
=
Fib()
>>>
print
(f(
10
))
[
0
,
1
,
1
,
2
,
3
,
5
,
8
,
13
,
21
,
34
]
|
可以把实例对象用类似函数的形式表示,进一步模糊了函数和对象之间的概念.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
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中,函数其实是一个对象:
1
2
3
4
|
>>> f
=
abs
>>> f.__name__
'abs'
>>> f(
-
123
)
|
由于 f 可以被调用,所以,f 被称为可调用对象.
所有的函数都是可调用对象.
一个类实例也可以变成一个可调用对象,只需要实现一个特殊方法__call__().
我们把 Person 类变成一个可调用对象:
1
2
3
4
5
6
7
8
|
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 实例直接调用:
1
2
3
4
|
>>> p
=
Person(
'Bob'
,
'male'
)
>>> p(
'Tim'
)
My name
is
Bob...
My friend
is
Tim...
|
单看 p('Tim') 你无法确定 p 是一个函数还是一个类实例,所以,在Python中,函数也是对象,对象和函数的区别并不显著.
关于次知识点的思考和扩展,我会在后续整理和补充,感谢大家对我的支持.
原文链接:https://www.py.cn/jishu/jichu/21779.html 。
最后此篇关于call在Python中改进数列的实例讲解的文章就讲到这里了,如果你想了解更多关于call在Python中改进数列的实例讲解的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
1、流程控制语句主要有if、ii...else、elseif(有时也可以写成else if)、switch四种。 PHP中语句格式为: if(条件满足) {执行语句} if(条件满足) {执行
目录 DFS初步概念 DFS例题-迷宫游戏 题目描述 输入输出格式 输入输出样例
This question两年前被问到,但它提到的资源要么不是很有帮助(恕我直言),要么链接不再有效。 必须有一些很好的教程才能理解 Phaser .我已经阅读了 javadoc,但我的眼睛呆滞了,因
This question两年前被问到,但它提到的资源要么不是很有帮助(恕我直言),要么链接不再有效。 必须有一些很好的教程才能理解 Phaser .我已经阅读了 javadoc,但我的眼睛呆滞了,因
这个正则出自这个网站 http://www.regexlab.com/zh/regref.htm 正向预搜索:"(?=xxxxx)","(?!xxxxx)"
chr(9)、chr(10)、chr(13)、chr(32)、chr(34) 所有关于 ASCII码的表格:[url]http://www.asciitable.com/[/url] chr(13)
我是一名优秀的程序员,十分优秀!