__call__ 长得很奇怪,看它的样子大概能够猜出来,它是python中的隐藏内容,而且是魔法语法。它具体是怎么用的呢?有什么用途呢?其实它的用途和 lambda 非常像,接下来就让我们来看看它们的区别,以及 __call__ 的三个优势。
一、__call__与lambda
首先我们来一个简单的示例热热身,通过代码很快就能了解他俩:
可以看到上面的代码调用方式简直一模一样:
• lambda:test1()
• __call__:test2()
那为啥还搞一个 __call__ 出来,直接 lambda 不就得了吗?
如果学过 面向对象 我们可以清楚,call 的用途其实就是将一个实例对象变成了像函数一样的去调用,非常简单清晰。
由于是对象,它却也带来了 lambda 无法实现的效果。
二、三大优势
第一大优势:保持状态
我们可以在对象中添加属性来保持状态,如下:
第二大优势:可维护性高
要想实现复杂的逻辑,lambda 十分不合适,它是为了方便实现 一行代码,如果过于复杂使用多个函数,还不如直接用函数。
而 __call__ 是让对象变成函数的调用方式,那就可以实现非常复杂的逻辑而又有 可读性,以此来提升可维护性。
第三大优势:可实现装饰器
我们以前实现装饰器都是如下的方法:
lambda 肯定是不太适合用于实现装饰器了,但用 __call__ 其实是可以的:
以后若是实现装饰器,完全可以用 __call__ 来实现,可能会比函数的方式在逻辑上更加清晰。
三、总结
__call__ 让一个对象像一个函数一样的调用,为 面向对象 开拓了新的思路,如果你通过本文了解了它,喜欢上了它,那不赶紧在你的项目里尝试尝试!
以上就是“python面试官最爱的考题:__call__和lambda的本质区别,答错直接淘汰!”的详细内容,想要了解更多Python教程欢迎持续关注编程学习网。
扫码二维码 获取免费视频学习资料
- 本文固定链接: http://www.phpxs.com/post/13143/
- 转载请注明:转载必须在正文中标注并保留原文链接
- 扫码: 扫上方二维码获取免费视频资料