在Python文档中经常会遇到术语:helper
和wrapper
。有时它们修饰的是函数(function),有时是方法(method),有时是类(class)。虽然我们都可以粗略地理解为函数/方法/类,但它们到底指向的含义是什么呢?这里谈谈我的理解。
Helper
Helper函数或方法是将很多小任务集合起来,以便于未来会被多次调用的任务集合。这其实是我们最常见的函数类型。它使得程序变得简洁,减少了很多重复的代码。因此我们可以称之为帮手函数/方法/类。按照我们惯常对函数理解,甚至可以不显式说明,只称为函数即可。
示例:
-
这里将一个绘图过程封装到了一个
my_plotter
函数中,在后面的代码被多次使用,实现了用不同数据绘制相同类型和风格图的意图。
Wrapper
Wrapper函数提供了一种为避免复杂过程而给用户提供简单界面的方式,或为调用不同函数而采用通用界面的方式。因此我们可以称之为包装函数/方法/类。
上面的说法有点绕,这里举两个栗子。
-
我们有一个从网页发送邮件的类。这个类有大量的选项,但其实这些选项在我们的应用并不需要被用到。这时就可以再写一个类,将原始类中我们不需要暴露的参数都隐藏起来。这种做法降低了代码的复杂性。
-
我们希望用一个通用的方式实现某种功能。比如我们有两个收取邮件的类,一个采用POP3协议,一个采用IMAP协议。我们希望要实现的APP能支持两种方式收取邮件,这时就可以写一个Wrapper类,使其具有两种协议。只需通过设置参数即可决定这个Wrapper类具体遵从哪种协议。更重要的是,当将来有了其它协议的需求时,APP本身并不需要修改,只需要升级一下这个Wrapper类即可。
总结
-
Helper
和Wrapper
并不是非此即彼的两个类型,而是从不同的角度对函数/方法/类的意义做了描述。 - 它们的共同特点是将代码变量简洁易用。
- 它们的不同点是各有侧重:
- 当我们强调某个函数/方法/类是
Helper
时,是在说明它封装了一个将会被经常调用的一组任务。 - 当我们强调某个函数/方法/类是
Wrapper
时,是在说明它封装了复杂性、多样性。
- 当我们强调某个函数/方法/类是