88、Python之鸭子类型: 函数是对象, 对象也不错像函数一样使用

发布日期:2024-11-25 21:02    点击次数:87

88、Python之鸭子类型: 函数是对象, 对象也不错像函数一样使用

在前边的著述中,咱们也曾反复说起的理念,“Python中一切王人对象”。在这个理念支捏下,Python中的函数亦然对象的一种,那么咱们有莫得办法自界说对象,像函数一样来使用呢。

按照鸭子类型的理念来看,要是一个对象,用起来大略函数一样,那么这个对象等于“函数”。天然,严格说来,这些不错像函数一样使用的对象,统称为可调用对象。

本文就来粗浅先容一下,若何使用Python中的魔术步履来已毕可调用对象。

本文的主要内容有:

1、__call__步履与可调用对象

2、可调用对象的使用场景

3、可调用对象与闭包的粗浅相比

__call__步履与可调用对象

__call__步履是Python中的一个魔术步履,它允许一个对象不错像函数一样被调用。

已毕了__call__步履的对象被称为可调用对象(Callable Objects)。可调用对象提供了一种天竟然神气来已毕步履的封装,而况不错像函数一样被使用。

从广义上来看,函数对象亦然可调用对象中的一种。

通过代码,粗浅演示一下__call__步履的使用:

本质规章:

从代码及本质规章中,不错看出,咱们已毕了一个可调用的对象的类power,然后通过这个类实例化的对象,都不错像函数一样径直调用了。

可调用对象的使用场景

天然上头的例子仅仅一个很粗浅的幂运算的演示,其实,咱们不错在__call__步履中,已毕营救业务需求的愈加复杂的运算或者操作的组合。

在本色使用中,可调用对象有相比无为的应用,包括但不限于:

1、函数的对象化:其实函数本人等于对象了,然而径直使用函数,好多时期是穷乏景色的纪录与处置的(天然,在函数式编程语境中,咱们倡导的是无景色的纯函数),然而好多时期业务场景中,会需要进功绩态的处置、操作的着力的累加。

2、可建树的函数步履:通过类的属性和步履来已毕动态对函数步履的调养,从而空隙愈加天真多变的业务需求。

3、庇荫器:使用可调用对象当作庇荫器,动态膨胀函数的功能,这点在之前的庇荫器的模块仍是先容了,需要的话,不错到故纸堆中翻看一下。

4、模拟闭包:这点在闭包章节中,也仍是先容过,闭包是一种给函数添加景色处置才智的技巧。而可调用对象也不错已毕相通的着力,而且,具有更好的可扩展性和可选藏性。

讲道理说,是否要使用纯函数,如故要给函数加上景色处置的功能,如故要和洽业求本色开赴,看具体的适用场景。

需要适用景色的,非要应用函数式编程的理念来作念,遏止不攀附,不是脑子抽风了的教条主张了吗。

此外,一朝函数有了景色,访佛于闭包,咱们就不错很天竟然已毕函数工场、延伸本质函数的有关需求了。这里就不再张开了。

可调用对象与闭包的粗浅相比

既然可调用对象和闭包都不错已毕函数景色处置的功能,干嘛非要添加一个可调用对象的见解呢。

接下来粗浅相比一下两者的优裂缝:

本文的主角是可调用对象,是以先来看一下可调用对象的优裂缝:

优点有:

1、景色处置通过类的属性和步履来已毕,愈加了了、直不雅。

2、不错诓骗类的接受和多态已毕可调用对象的步履的扩展,是以具有更好的扩展性。

3、从代码组织上,可调用对象的已毕也具有更好的可读性、易于选藏。

裂缝亦然有的:

1、正本这是粗浅的函数界说,扩展到了类的界说,代码会变得相比冗长。

2、类界说的神气中,会有些不行幸免的样板代码,是咱们相比敌视的。

然自后一下闭包的优裂缝:

可调用对象的裂缝,反过来其实等于闭包的优点,是以闭包的优点有:

1、通过相比莽撞的代码就不错已毕粗浅的景色处置。

2、径直通过界说函数来已毕所需的功能,幸免了繁琐的样板代码。

闭包的裂缝有:

1、景色处置已毕不如可调用对象那样了了直不雅,频繁是通过闭包中的解放变量来已毕。

2、扩展性相对较差,没法诓骗面向对象中接受和多态的特质。

是以,对于景色的处置,是该使用闭包如故该使用可调用对象,是要和洽具体的使用场景的,莫得十足的好与坏,适用就好。

淡雅

本文主要先容了__call__这个魔术步履的使用,界说出的可调用对象,不错像函数一样被调用。可调用对象在函数对象化、景色的处置、步履的动态建树等场景中都是相比适用的。此外,相比了可调用对象与闭包这两者各自的优裂缝。在具体使用中若何进行选择,等于见仁见智了。

以上等于本文的一齐内容了,感谢您的拨冗阅读,但愿您能有几许收货。