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

栏目: Python · 发布时间: 7年前

内容简介:对默认参数的批评,主要是在其他语言中(静态语言,动态语言由于没有『方法重载』,出现得少)。究其原因,我觉得主要是:语法上不够自然,对看代码的人不友好。比如C++中:.如果没有充分的上下文,乍一看,还以为这是两个重载方法,给人带来了心智负担。

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

比如C++中:

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

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

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

所以在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 种写法。比如

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 )。


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

算法设计与分析

算法设计与分析

郑宗汉//郑晓明 / 清华大学 / 2011-7 / 45.00元

《算法设计与分析(第2版)》系统地介绍算法设计与分析的概念和方法,共4部分内容。第1部分介绍算法设计与分析的基本概念,结合穷举法、排序问题及其他一些算法,对算法的时间复杂性的概念及复杂性的分析方法作了较为详细的叙述;第2部分以算法设计技术为纲,从合并排序、堆排序、离散集合的union和find操作开始,进而介绍递归技术、分治法、贪婪法、动态规划、回溯法、分支与限界法和随机算法等算法设计技术及其复杂......一起来看看 《算法设计与分析》 这本书的介绍吧!

MD5 加密
MD5 加密

MD5 加密工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具