Python的默认参数,为API设计带来了哪些便利

不止一次听到对默认参数的批评,由于它让 API 变得模糊。bash

对默认参数的批评

对默认参数的批评,主要是在其余语言中(静态语言,动态语言因为没有『方法重载』,出现得少)。究其缘由,我以为主要是:语法上不够天然,对看代码的人不友好。spa

好比C++中:code

一个方法
void DoSomething(int a, int b=100);

调用的人
1. DoSomething(1)
2. DoSomething(1, 1000)
复制代码

.若是没有充分的上下文,乍一看,还觉得这是两个重载方法,给人带来了心智负担。class

因此在C++中,通常比较少使用默认参数。语法

Python是如何处理的

Python 中,也不能避免上面的缺陷,甚至缺陷更加厉害 。好比仍是上面的代码,Python容许你这样写代码:方法

1. DoSomething(1)
2. DoSomething(1, 1000)
3. DoSomething(1, b=1000)
复制代码

这就很坑爹了,要是参数一多,组合状况更加多,甚至还莫名其妙报错。1 是正常操做,2 是坏习惯的写法,3 是好习惯的写法。项目

因此,从这个角度来看,Python 彷佛让状况变得更加糟糕了。那么,是否应该『由于怕噎着,因此干脆不吃饭,饿死』?最佳实践

正确的作法

彻底没必要如此。而且,这是体现做为 API 做者的素养的机会来了。语言

首先是 Python 3(假设 >= 3.5)。利用新特性便可,让调用端只能使用第 3 种写法。好比di

def DoSomething(a, *, b=10, c=100, d=1000):
	pass
	
调用端只能:
要么按照不去理会默认参数:DoSomething(100)
要么多打点字符:DoSomething(100, b=100, c=11, d=0)     ( 这样,代码美观不少。 )
复制代码

其次是 Python 2。解决方案是:换 Python 3。或者你假设你旁边的 Python 使用者,都是高素质人才,你们都是坚决按照最佳实践写代码(这种几率有多大?)。

另外,如今已经没有人或文章,谈论 2 和 3的问题了。保守派的新项目,都是 Python 3.5 起 了( 俺们的新项目是 3. 6 )。

相关文章
相关标签/搜索