天天看点

《编写高质量Python代码的59个有效方法》——第19条:用关键字参数来表达可选的行为

本节书摘来自华章社区《编写高质量python代码的59个有效方法》一书中的第19条:用关键字参数来表达可选的行为,作者[美]布雷特·斯拉特金(brett slatkin),更多章节内容可以访问云栖社区“华章社区”公众号查看

第19条:用关键字参数来表达可选的行为

与其他编程语言一样,调用python函数时,可以按位置传递参数。

python函数中的所有位置参数,都可以按关键字传递。采用关键字形式来指定参数值时,我们会在表示函数调用操作的那一对圆括号内,以赋值的格式,把参数名称和参数值分别放在等号左右两侧。关键字参数的顺序不限,只要把函数所要求的全部位置参数都指定好即可。还可以混合使用关键字参数和位置参数来调用函数。下面这些调用,都是等效的:

位置参数必须出现在关键字参数之前。

每个参数只能指定一次。

灵活使用关键字参数,能带来三个重要的好处。

首先,以关键字参数来调用函数,能使读到这行代码的人更容易理解其含义。如果读到了remainder(20, 7)这样的调用代码,那么必须查看方法的实现代码,才能够明白这两个参数里面,究竟哪一个是被除数,哪一个是除数。若是改用关键字的形式来调用,则立刻就能根据number=20和divisor=7等写法来获知每个参数的含义。

关键字参数的第二个好处是,它可以在函数定义中提供默认值。在大部分情况下,函数调用者只需使用这些默认值就够了,若要开启某些附加功能,则可以指定相应的关键字参数。这样做可以消除重复代码,并使代码变得整洁。

例如,要计算液体流入容器的速率。如果容器比较大,那么可以根据两个时间点上的重量差及时间差来判断流率。

通常情况下,求出每秒钟流过的千克数就可以了。然而某些时候,可能想根据传感器上一次的读数,在更大的时间跨度上面估算流率,如以小时或天来估算。只需给函数添加一个参数,用来表示两种时间段的比例因子,即可提供这种行为。

这样写的缺点是,每次调用函数时,都要指定period参数,即便我们想计算最常见的每秒流率,也依然要把1传给period参数。

为了使函数调用语句能写得简单一些,我们可以给period参数定义默认值。

现在的period参数,就成了可选参数。

这种办法适用于比较简单的默认值。如果默认值比较复杂,这样写就不太好了,那种情况可以参考本书