程序员A编写以下函数:def compute_value(threshold = sys.float_info.max):
...
return value
它有可选参数threshold,以自然的方式将最大浮点值作为默认值来表示“无阈值”。在
程序员B也有一个阈值的表示,但没有使用表示没有阈值。不幸的是,如果threshold=None,compute_value函数不会引发任何异常,而是给出了错误的答案。因此,当程序员B将None作为阈值时,就会出现一个bug。在
我认为最好的解决方案是改变
^{pr2}$
因为这个函数比以前更通用,因为它以一种有意义的方式处理None值。在
这就提出了一个问题:是否总是最好只使用“无”作为默认值?在
这不是第一次函数有不同于无的默认参数给我带来麻烦。在其他情况下,我发现自己没有从夸格斯字典中删除任何值。。。在
另一个相关的(也许很傻)问题。实际修改后的B函数如下:def compute_value(threshold = sys.float_info.max):
if threshold is None:
threshold = sys.float_info.max
...
return value
这是完全正确的,但在我看来很糟糕。不好,因为系统浮动信息.max重复两次。。。但是:这是否违反了干燥原则?因为,严格地说,在第一次执行中也没有重复两次,而且都没有和系统浮动信息.max是常量。在